如何在开发人员计算机上构建Visual Studio 2017.NET Core.exe文件?

如何在开发人员计算机上构建Visual Studio 2017.NET Core.exe文件?,exe,.net-core,visual-studio-2017,csproj,Exe,.net Core,Visual Studio 2017,Csproj,有关TLDR,请参阅下面的解决方案部分 我使用了Visual Studio 2015社区版并升级到Visual Studio 2017。我正在开发一个.NET核心控制台应用程序我在这里只谈论我的本地开发机器,它安装了Visual Studio,并且安装了.NET核心运行时和SDK。 在Visual Studio 2015中,使用了project.json文件,默认情况下,构建过程在bin/Debug/netcoreapp1.1中生成了一个DLL文件,可以使用dotnet run命令运行该文件。但

有关TLDR,请参阅下面的解决方案部分

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

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

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

并添加
运行时
部分,例如

"runtimes": {
  "win10-x64": {}
}
如果您这样做并构建了项目,则会创建一个EXE文件,您可以直接运行它,而无需使用
dotnet run

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

该项目已转换为Visual Studio 2017,但它仅再次生成DLL文件。所以,我试着创造一个全新的、空虚的你好,世界!程序并尝试从中获取EXE文件。你好,世界!csproj文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
</Project>
这与我想要的非常接近——生成一个EXE文件。但是,这将创建运行.NET Framework 4.6而不是.NET Core的EXE文件。因此,这并不能解决问题我真正想要的是.NET核心可执行文件,而不必进行自包含部署。可能吗?

解决方案 我刚刚发现这确实是可能的。我只是不知道如何在IDE中实现它。如果在IDE中按Ctrl+Alt+F7,当前会发生什么情况?生成与命令相同的结果:

dotnet build --configuration Debug
我想要的东西可以通过命令产生:

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

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

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

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

在.csproj中,可以通过指定名为
RuntimeIdentifier
的MSBuild属性来实现。在命令行上,当您说
dotnet build--runtime win10-x64
时,
--runtime
值被传递到MSBuild中,并具有
RuntimeIdentifier
属性

一个选项是您可以在.csproj中纯粹设置
运行时标识符

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

win10-x64
现在,当您在Visual Studio中生成时,它将在生成输出文件夹中生成一个
.exe

或者
我不确定您是否对此感兴趣,但听起来您只是想要一种不调用
dotnet run
即可运行应用程序的方法。如果这是真的,您根本不需要设置运行时。默认情况下,应用程序内置在
bin\Debug\netcoreapp1.1\AppName.dll
中。运行应用程序时,您可以说
dotnet bin\Debug\netcoreapp1.1\AppName.dll
,这基本上就是
dotnet run
在封面下所做的。

工作!很多。我想补充一点,大家应该注意
RuntimeIdentifier
的单数,因为似乎还有一个分号分隔的列表,名为
RuntimeIdentifiers
,它显然做了其他的事情。
RuntimeIdentifiers
是项目可以针对的可用运行时列表。正如
TargetFrameworks
一样,它是项目可以针对的可用框架列表。不同之处在于,当您构建时,它为所有目标框架构建,但它只为“运行时不可知”或“可移植”运行时构建它们。要为特定运行时生成/发布,必须使用
RuntimeIdentifier
MSBuild属性(或dotnet命令行上的
--runtime
)指定一个运行时。
dotnet build --configuration Debug --runtime win10-x64
<PropertyGroup>
  <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>