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


77

每次我使用新的.NET Core RC2模板构建项目时,都不会获得runnable。EXE文件。如果我按F5调试控制台应用程序,则在

C:\Program Files\dotnet\dotnet.exe 

应用。如果我使用

dotnet run 

文件夹中的命令,它也可以正常运行。但是,如果没有.NET Core CLI工具,我将无法运行该应用程序。

我的内容

 bin\Debug\netcoreapp1.0\

文件夹如下所示:

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

谢谢!


@DavidPine在RC2中已弃用了使用compileOptions的答案。无论如何我都尝试过,结果也一样。
Johannes Heesterman '16

您说得对,对此感到抱歉。应该是,buildOptions并且您已经有了"emitEntryPoint": true应该解决的技巧。您是否尝试dotnet buildcmd行窗口手动运行?另外,您确定要在正确的输出目录中查找吗?
大卫·派恩

@DavidPine是的,我尝试了构建,运行和发布命令。他们都工作正常。我只是在我的bin文件夹或任何基础文件夹中没有.exe文件。
Johannes Heesterman '16

我猜你应该用“ dotnet yourfile.dll”运行netcoreapp1.0。恩,这对我在Windows和WSL上都很好。
Felype'8

Answers:


73

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

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

  • 独立应用程序:独立应用程序实际上可以与旧的.NET控制台好应用程序类似,因为它们可以生成.exe文件。.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": { }
  }
}

2
而已!谢谢!
Johannes Heesterman '16

您能解释一下是否需要netcoreapp1.0框架部分吗?那是您列出System.Net.Ping的依存关系-可以将其移至先前定义的dependencies部分吗?
2016年

3
这些应用程序模型都不产生单个.exe,我想这只能在完整的.NET Framework上实现吗?
罗曼·斯塔科夫

@romkyns单个.exe?您是说没有任何.dll?
凯文木屋

@Pinpoint-很棒的解释。您与MS docs的链接也列出了Linux运行时(例如debian.8-x64)。它们可以构建为独立应用程序吗?
Alien Technology'Sep

13

答案是现在包含完整步骤的文档

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

  1. 框架相关的部署
  2. 独立部署

对于可运行的.EXE文件,应使用独立式部署


9

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

dotnet publish --runtime win7-x64

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

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


4

步骤1:"type": "platform",从Project.jsonframeworks部分下删除

步骤2:将运行时部分添加到project.json。请注意,每个部分都用逗号分隔。添加您的运行时。以下仅是赢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


2

ASP.NET Core尝试改变你的应用程序type,以defaultproject.json

"Microsoft.NETCore.App": {
  "type": "default",
  "version": "1.0.0-*"
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.