将 .Net Core 构建为 EXE 而不是 DLL

Posted

技术标签:

【中文标题】将 .Net Core 构建为 EXE 而不是 DLL【英文标题】:Build .Net Core as an EXE not a DLL 【发布时间】:2017-01-17 19:32:48 【问题描述】:

我想将 .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 时,我都会在我的 bin/Debug 文件夹中获得一个 .dll

如何将 .NET Core 应用程序构建为 exe?

奖励:我愿意,它会在 Mac 或其他设备上运行吗?

【问题讨论】:

Scott Hanselman 写了一个 blog 可以回答这个确切的问题 @MarkC。效果很好,尽管现在通过 VSCode 破坏了构建和调试:/ 这个问题目前可能有最好的答案:***.com/questions/51604179/… 【参考方案1】:

要生成 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://docs.microsoft.com/en-us/dotnet/articles/core/deploying/#self-contained-deployments-scd

【讨论】:

自 2017 年 3 月起,project.json 已被弃用,取而代之的是 .csproj 文件。更多信息可以在这里找到:docs.microsoft.com/en-us/dotnet/core/tools/…。根据此页面,运行时元素现在是:<PropertyGroup><RuntimeIdentifiers>win7-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers></PropertyGroup>【参考方案2】:

我认为大多数人访问此页面是因为他们选择了 .net 内核,但无法从 VS 2017 构建中获取可执行的 .exe 文件。 vs 2015 始终用于为控制台应用程序制作 .exe 文件。突然 vs 2017 正在为这个简单的任务大惊小怪。使用 vs 2017 创建项目时,您可以为控制台应用程序提供 2 个选择。一种是控制台应用程序 (.NET Core),另一种是控制台应用程序 (.NET Framework)。如果你选择 .NET Core 选项,你将不得不从你的 Build 中获得一个 .exe 文件。 (.NET Core) 选项从 Build 创建一个 .dll 文件。如果您选择 (.NET Framework) 选项,它将默认为您构建一个 xxxx.exe 可执行文件。

【讨论】:

或者您可以在您的 csproj 上指定 OutputType 并将其设置为 Exe Colin,感谢您的建议,同意如果可行,这将是一个简单的修复。使用 VS 2017 Enterprise,我创建了一个 (.NET Core) 控制台应用程序。当我创建 csproj 文件时,它显示输出类型的 Exe,并没有像我们预期的那样说“dll”,当我去查看 bin/... 目录时,只有一个 .dll 文件而不是 . exe文件。

以上是关于将 .Net Core 构建为 EXE 而不是 DLL的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2017 将 .NET Core 应用程序编译为 EXE 文件

为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?

如何将 exe 发布与控制台 .net core 2.2 应用程序的 VS2019 构建集成?

将NuGet构建工具包与ASP.NET Core一起使用

Service Fabric Guest .Net Core 3.1 API exe 的 Azure DevOps 构建管道在创建包时失败

在 .NET Core RC2 中构建 .exe 文件