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

Dou*_*ell 8 c# dll .net-core

我想构建一个.NET核心项目作为EXE而不是DLL,以便它可以执行.

这里的答案不起作用:如何运行.Net Core dll?

以下是示例代码:

using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用VSCode,每当我使用构建任务构建项目时,或者运行dotnet restore我只是.dll在我的bin/Debug文件夹中获取.

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

额外奖励:我这样做,会在Mac或其他设备上运行吗?

ren*_*Man 8

我认为大多数人进入此页面是因为他们选择了 .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 可执行文件。

  • 科林,感谢这个建议,同意如果有效的话,这将是一个简单的修复。我使用 VS 2017 Enterprise 创建了一个(.NET Core)控制台应用程序。当我创建 csproj 文件时,输出类型显示 Exe,并没有像我们预期的那样说“dll”,当我查看 bin/... 目录时,只有一个 .dll 文件,而不是 . exe 文件。 (8认同)

Sha*_*tin 7

要生成 EXE 而不是 DLL,您需要一个独立的部署。您当前所做的是依赖于框架的部署。要将您的转换为自包含,请在您的 project.json 文件中执行以下步骤。

  1. 删除"type": "platform"
  2. "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": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

另见:https : //docs.microsoft.com/en-us/dotnet/articles/core/deploying/#self-contained-deployments-scd

  • 截至 2017 年 3 月,project.json 已被弃用,取而代之的是 .csproj 文件。更多信息可以在这里找到:https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj。根据此页面,运行时元素现在是:`<PropertyGroup><RuntimeIdentifiers>win7-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers></PropertyGroup>`。 (4认同)