请参阅下面的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
参数复制此行为。
答案 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
所涵盖的内容。