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

问题描述 投票:0回答:3

我想将 .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 或其他设备上运行吗?

c# dll .net-core
3个回答
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 可执行文件。


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": {}
  }
}

另请参阅:https://learn.microsoft.com/en-us/dotnet/articles/core/deploying/#self-contained-deployments-scd


0
投票

接受的答案指出:

要生成 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 ,但应用程序在尝试访问缺少的特定于平台的依赖项时可能会崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.