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

Wap*_*pac 4 exe csproj .net-core visual-studio-2017

有关TLDR,请参阅下面的EDIT部分.

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

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

...
"Microsoft.NETCore.App": {
  "version": "1.0.1",
  "type": "platform"
},
...
Run Code Online (Sandbox Code Playgroud)

- >

...
"Microsoft.NETCore.App": {
  "version": "1.0.1" 
},
...
Run Code Online (Sandbox Code Playgroud)

并添加一个runtimes部分,如

"runtimes": {
  "win10-x64": {}
}
Run Code Online (Sandbox Code Playgroud)

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

现在的问题是,使用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>
Run Code Online (Sandbox Code Playgroud)

这只会生成您可以运行的DLL文件dotnet run.可以对此进行更改:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

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

编辑:刚刚发现这确实是可能的,我只是不知道如何在IDE中做到这一点.如果我Ctrl+Alt+F7在IDE中命中,会产生与命令相同的结果

dotnet build --configuration Debug

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

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

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

Eri*_*rdt 10

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

在project.json中,您通过删除type: platform和添加runtimes部分来完成上述操作.

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

一个选项是你可以纯粹设置RuntimeIdentifier你的.csproj:

<PropertyGroup>
  <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

另外

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