在.NET Core RC2中生成.exe文件

Joh*_*man 74 .net .net-core package.json asp.net-core .net-core-rc2

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

C:\Program Files\dotnet\dotnet.exe 
Run Code Online (Sandbox Code Playgroud)

应用.如果我使用

dotnet run 
Run Code Online (Sandbox Code Playgroud)

在文件夹中的命令,它运行正常.但我认为没有.NET Core CLI工具就无法运行应用程序.

我的内容

 bin\Debug\netcoreapp1.0\
Run Code Online (Sandbox Code Playgroud)

文件夹看起来像这样:

Bin文件夹结构

你可以看到没有.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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Kév*_*let 71

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

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

  • 独立应用程序:独立应用程序与生成.exe文件的旧.NET控制台应用程序非常相似..NET Core运行时不必安装在计算机上,因为它直接嵌入了应用程序本身.

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

  • 添加一个runtimes部分以列出您的应用将定位的环境(例如win7-x64ubuntu.14.04-x64).您可以在此处找到完整列表.
  • 删除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": { }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这些应用程序模型都不会产生单个.exe - 我猜这只能在完整的.NET Framework上实现吗? (3认同)
  • 而已!谢谢! (2认同)

zwc*_*oud 13

答案在文档中,现在有完整的步骤.

您可以为.NET Core应用程序创建两种类型的部署:

  1. 依赖于框架的部署
  2. 自包含部署

对于可运行的.EXE文件,应使用自包含部署.


Jac*_*ler 7

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

dotnet publish --runtime win7-x64
Run Code Online (Sandbox Code Playgroud)

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

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