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

Build .exe file in .NET Core RC2

每次我使用新的 .NET Core RC2 模板构建项目时,我 没有 提供 运行nable .EXE 文件。如果我按 F5 调试我的控制台应用程序,它 运行 可以通过

C:\Program Files\dotnet\dotnet.exe 

申请。如果我使用

dotnet run 

文件夹中的命令,运行也可以。但是我认为没有 .NET Core CLI 工具就无法 运行 应用程序。

我的内容

 bin\Debug\netcoreapp1.0\

文件夹如下所示:

如您所见,没有可用的 .EXE 文件。只是 dll。

我是不是忽略了什么?还是我的 project.json 文件有问题?

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

谢谢!

.NET Core 中实际上有 2 个应用程序模型:

  • 便携式应用程序:深受 "DNX console apps" 启发,这些应用程序不生成 .exe 文件,而是由.NET Core 共享运行时(由于其特殊的 type: platform 属性,其版本由 Microsoft.NETCore.App 包定义)。必须在计算机上安装相应的 .NET Core 运行时才能使用便携式应用程序。如果找不到准确的版本,当 运行 dotnet run.

  • 时抛出异常
  • 独立应用程序:独立应用程序非常类似于旧的 .NET 控制台应用程序,因为它们会生成 .exe 文件。 .NET Core 运行时不必安装在机器上,因为它直接嵌入到应用程序本身。

您目前使用的是第一个模型。要使用独立模型,您需要调整 project.json:

  • 添加 runtimes 部分以列出您的应用将面向的环境(例如 win7-x64ubuntu.14.04-x64)。您可以找到完整列表 here.
  • 删除 Microsoft.NETCore.App 依赖项。你可以用这个包代替它:"NETStandard.Library": "1.5.0-rc2-24027".

这是一个独立应用的示例:

{
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "warningsAsErrors": true
  },

  "dependencies": {
    "Microsoft.Extensions.Configuration.Binder": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "NETStandard.Library": "1.5.0-rc2-24027"
  },

  "frameworks": {
    "net451": { },

    "netcoreapp1.0": {
      "dependencies": {
        "System.Net.Ping": "4.0.0-rc2-24027"
      },

      "imports": [
        "dnxcore50",
        "dotnet5.6",
        "portable-net451+win8"
      ]
    }
  },

  "runtimes": {
    "win7-x64": { }
  }
}

ASP.NET Core 中尝试将您的应用 type 更改为 default,在 project.json 中:

"Microsoft.NETCore.App": {
  "type": "default",
  "version": "1.0.0-*"
}

答案在 documentation 中,现在步骤完整。

You can create two types of deployments for .NET Core applications:

  1. Framework-dependent deployment
  2. Self-contained deployment

对于可运行的 .EXE 文件,应使用 Publish self-contained

第 1 步:从 frameworks 部分

下的 Project.json 中删除 "type": "platform",

第 2 步:将 运行 时间段添加到您的 project.json。请注意,每个部分都用逗号分隔。添加您的 运行 时间。以下只是 win 10 的示例。

"runtimes": {
       "win10-x64": {}      
     }

第 3 步:在您的项目上执行 dotnet restore 命令。 (打开 cmd,转到 src 文件夹所在的项目文件夹,运行 dotnet restor)

第 4 步:dotnet pack 第 4 步:dotnet build -r win10-x64 - 或者只是构建。

第 5 步:您可以注意到在 debug/netcore/win10/

下创建了 .exe

要从 .NET Core 控制台应用程序创建 运行可用应用程序,您可以使用 dotnet tool。只是 运行 在你的项目目录中:

dotnet publish --runtime win7-x64

这将创建一个独立的应用程序(独立部署;包括所有必要的库,占用您的磁盘至少 60MB)。当然你也可以选择其他运行次,比如osx.10.11-x64ubuntu.16.04-x64

如果您使用默认配置 (New Project -> Console App (.NET Core)),则无需修改任何配置文件。