如何在开发人员计算机上构建MSVS 2017 .NET Core .exe?

时间:2017-03-18 10:34:40

标签: exe .net-core visual-studio-2017 csproj

请参阅下面的EDIT部分了解TLDR。

我使用了MSVS 2015社区并升级到MSVS 2017.我正在开发.NET Core控制台应用程序。 我在这里只讨论我的本地开发机器,它安装了MSVS,并且安装了.NET Core运行时和SDK。

在MSVS 2015中,使用了project.json文件,默认情况下,构建过程在bin/Debug/netcoreapp1.1中生成了一个DLL文件,该文件可以使用dotnet run命令运行。但是有一个选项可以在project.json文件中做一个小调整:

...
"Microsoft.NETCore.App": {
  "version": "1.0.1",
  "type": "platform"
},
...

- >

...
"Microsoft.NETCore.App": {
  "version": "1.0.1" 
},
...

并添加runtimes部分,例如

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

如果您这样做并构建了项目,则会创建一个EXE文件,您可以直接运行,而不使用dotnet run

现在问题是,使用csproj XML文件在MSVS 2017中是否可以?更具体地说,是否可以在没有繁重的自包含部署的情况下实现?我确实希望它没有完整的SDD发布,因为我在开发过程中使用这些可执行文件进行本地测试。一旦项目发布,我就会进行SDD发布,但这在开发过程中非常不方便。

该项目已转换为MSVS 2017,但它只会再次生成DLL文件。所以,我试图创建一个全新的空hello世界程序,并尝试从中获取EXE文件。 hello world csproj文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
</Project>

这只生成可以使用dotnet run运行的DLL文件。可以对此进行更改:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
  </PropertyGroup>
</Project>

这非常接近我想要的 - 生成一个EXE文件。但是,这会创建运行.NET Framework 4.6的EXE文件,而不是.NET Core。所以,它没有解决问题。 我真正想要的是.NET Core可执行文件而无需进行自包含部署。有可能吗?

编辑:刚刚发现这确实可行,我只是不知道如何在IDE中执行此操作。如果我在IDE中点击Ctrl+Alt+F7会产生与命令

相同的结果

dotnet build --configuration Debug

我想要的东西可以通过命令

生成

dotnet build --configuration Debug --runtime win10-x64

所以我现在真正想要的是修改默认的IDE构建命令,以使用--runtime win10-x64参数复制此行为。

1 个答案:

答案 0 :(得分:9)

在.NET Core中,如果您想在.exe期间生成dotnet build,则需要提供您希望为其构建可执行文件的运行时。

在project.json中,您按照上述说明删除了type: platform并添加了runtimes部分。

在.csproj中,您可以通过指定名为RuntimeIdentifier的MSBuild属性来完成此操作。在命令行中,当您说dotnet build --runtime win10-x64时,--runtime值传递到MSBuild具有RuntimeIdentifier属性。

一个选项是您可以在.csproj中纯粹设置RuntimeIdentifier

<PropertyGroup>
  <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>

现在,当您在VS中构建时,它将在构建输出文件夹中生成.exe

替代地

我不确定您是否对此感兴趣,但听起来您只想要一种运行应用程序而无需调用dotnet run的方法。如果是这样,则根本不需要设置运行时。默认情况下,您的应用程序内置于bin\Debug\netcoreapp1.1\AppName.dll。您可以通过说出dotnet bin\Debug\netcoreapp1.1\AppName.dll来运行您的应用程序,这基本上是dotnet run所涵盖的内容。