如何在开发人员计算机上构建 Visual Studio 2017 .NET Core .exe 文件?
How can I build a Visual Studio 2017 .NET Core .exe file on a developer machine?
请参阅下面的 解决方案 部分以了解 TLDR。
我使用 Visual Studio 2015 社区版并升级到 Visual Studio 2017。我正在开发 .NET Core 控制台应用程序。 我在这里只谈论我的本地开发机器,它安装了 Visual Studio,安装了 .NET Core 运行 次和 SDK。
在 Visual Studio 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
。
现在的问题是,在 Visual Studio 2017 中使用 .csproj XML 文件是否可以实现同样的效果?更具体地说,是否可以在没有大量独立部署的情况下实现?我确实希望它没有完整的 SDD 发布,因为我在开发过程中将这些可执行文件仅用于本地测试。一旦项目要发布,我就做SDD发布,但是在开发过程中很不方便。
该项目已转换为 Visual Studio 2017,但它仅再次生成 DLL 文件。因此,我尝试创建一个全新的空 Hello, World! 程序并尝试从中获取 EXE 文件。 Hello, World! csproj 文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
这只会生成一个 DLL 文件,您可以 运行 和 dotnet run
。可以对此进行更改:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
</PropertyGroup>
</Project>
这非常接近我想要的 - 生成一个 EXE 文件。但是,这会创建 运行s .NET Framework 4.6 而不是 .NET Core 的 EXE 文件。所以,它不能解决问题。 我真正想要的是 .NET Core 可执行文件,而无需进行独立部署。可能吗?
解决方案
我才发现这确实是可以的。我只是不知道如何在 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 中纯粹设置 RuntimeIdentifier
:
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
现在,当您在 Visual Studio 中构建时,它会在构建输出文件夹中生成一个 .exe
。
或者
我不确定您是否对此感兴趣,但听起来您只是想要一种无需调用 dotnet run
即可 运行 您的应用程序的方法。如果是这样,您根本不需要设置 运行 时间。默认情况下,您的应用程序内置于 bin\Debug\netcoreapp1.1\AppName.dll
。您可以通过说 dotnet bin\Debug\netcoreapp1.1\AppName.dll
来 运行 您的应用程序,这基本上是 dotnet run
在幕后所做的。
请参阅下面的 解决方案 部分以了解 TLDR。
我使用 Visual Studio 2015 社区版并升级到 Visual Studio 2017。我正在开发 .NET Core 控制台应用程序。 我在这里只谈论我的本地开发机器,它安装了 Visual Studio,安装了 .NET Core 运行 次和 SDK。
在 Visual Studio 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
。
现在的问题是,在 Visual Studio 2017 中使用 .csproj XML 文件是否可以实现同样的效果?更具体地说,是否可以在没有大量独立部署的情况下实现?我确实希望它没有完整的 SDD 发布,因为我在开发过程中将这些可执行文件仅用于本地测试。一旦项目要发布,我就做SDD发布,但是在开发过程中很不方便。
该项目已转换为 Visual Studio 2017,但它仅再次生成 DLL 文件。因此,我尝试创建一个全新的空 Hello, World! 程序并尝试从中获取 EXE 文件。 Hello, World! csproj 文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
这只会生成一个 DLL 文件,您可以 运行 和 dotnet run
。可以对此进行更改:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
</PropertyGroup>
</Project>
这非常接近我想要的 - 生成一个 EXE 文件。但是,这会创建 运行s .NET Framework 4.6 而不是 .NET Core 的 EXE 文件。所以,它不能解决问题。 我真正想要的是 .NET Core 可执行文件,而无需进行独立部署。可能吗?
解决方案
我才发现这确实是可以的。我只是不知道如何在 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 中纯粹设置 RuntimeIdentifier
:
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
现在,当您在 Visual Studio 中构建时,它会在构建输出文件夹中生成一个 .exe
。
或者
我不确定您是否对此感兴趣,但听起来您只是想要一种无需调用 dotnet run
即可 运行 您的应用程序的方法。如果是这样,您根本不需要设置 运行 时间。默认情况下,您的应用程序内置于 bin\Debug\netcoreapp1.1\AppName.dll
。您可以通过说 dotnet bin\Debug\netcoreapp1.1\AppName.dll
来 运行 您的应用程序,这基本上是 dotnet run
在幕后所做的。