我想将 .NET Core 项目构建为 EXE 而不是 DLL,以便可以执行它。
这里的答案不起作用:How to run a .Net Core dll?
这是示例代码:
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
这是我的project.json:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {},
"frameworks": {
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.1.0"
}
},
"imports": "dnxcore50"
}
}
}
我目前正在使用 VSCode,每当我使用构建任务构建项目或运行
dotnet restore
时,我都会在我的 .dll
文件夹中得到一个 bin/Debug
。
如何将 .NET Core 应用程序构建为 exe?
奖励:我愿意,它可以在 Mac 或其他设备上运行吗?
我认为大多数人进入此页面是因为他们选择了 .net core,并且无法从 VS 2017/VS 2019 版本中获取可执行的 .exe 文件。 vs 2015 总是用来为控制台应用程序制作 .exe 文件。在 vs 2017/vs 2019 中,当您创建项目时,您有 2 个控制台应用程序选择。一种是控制台应用程序 (.NET Core),另一种选择是控制台应用程序 (.NET Framework)。如果您选择 .NET Core 选项,您将不得不竭尽全力从构建中获取 .exe 文件。 (.NET Core) 选项从构建创建 .dll 文件。如果您选择 (.NET Framework) 选项,它将默认为您构建 xxxx.exe 可执行文件。
要生成 EXE 而不是 DLL,您需要 一个独立的部署。您当前正在做的是依赖于框架的部署。 要将您的项目转换为独立的,请在您的project.json 文件中执行以下步骤。
"type": "platform"
。"runtimes"
部分。构建时,传入目标操作系统。例如。
dotnet build -r osx.10.10-x64
。
这是生成的project.json
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {},
"frameworks": {
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.1.0"
}
},
"imports": "dnxcore50"
}
},
"runtimes": {
"win10-x64": {},
"osx.10.10-x64": {}
}
}
另请参阅:https://learn.microsoft.com/en-us/dotnet/articles/core/deploying/#self-contained-deployments-scd
接受的答案指出:
要生成 EXE 而不是 DLL,您需要一个独立的部署。
但是,您可以生成一个可执行文件作为依赖于框架。在 .NET 应用程序发布概述 - 生成可执行文件:
可执行文件不是跨平台的,它们特定于操作系统和CPU架构。 发布应用程序并创建可执行文件时,您可以将应用程序发布为独立应用程序或依赖于框架的应用程序。将应用程序发布为独立的应用程序时会包含 .NET 运行时,并且应用程序的用户不必担心在运行应用程序之前安装 .NET。发布依赖于框架的应用程序不包括 .NET 运行时;仅包含应用程序和第三方依赖项。
例如,这些 MSBuild 属性将生成 linux 64 位的本机可执行文件和 dll:
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<TargetType>exe</TargetType>
注意:虽然该 dll 是跨平台的,但使用这些选项生成的 dll 不能保证能够在除指定操作系统之外的另一个操作系统中运行。发生这种情况是因为如 .NET 应用程序发布概述 - 特定于平台且依赖于框架中所述:
如果应用程序使用具有特定于平台的实现的 NuGet 包,则仅复制目标平台的依赖项。这些依赖项会直接复制到发布文件夹中。
虽然从技术上讲,生成的二进制文件是跨平台的,但通过针对特定平台,不能保证您的应用程序可以跨平台运行。您可以运行 dotnet,但应用程序在尝试访问缺少的特定于平台的依赖项时可能会崩溃。