我可以在我的 .NET Core csproj 中包含多种发布方法吗?
Can I include multiple publishing methods in my .NET Core csproj?
我有一个简单的 .NET Core .csproj
用于我想以两种方式部署的项目:
- 作为一个自包含的、修剪过的单文件二进制文件(一个可移植的
mytool.exe
,没有其他文件)
- 作为未修剪的多文件 DLL(
dotnet mytool.dll
,文件夹中还有其他一些支持 DLL)
我想这样做是因为单文件 .NET Core 二进制文件的冷启动速度非常慢。我希望这个工具尽可能便携,所以我需要一个单文件 .NET Core 二进制文件,但我也想让用户在不需要便携性的情况下更快地调用 dotnet mytool.dll
。
我已经配置了我的工具来构建一个独立的、修剪过的、单一文件的二进制文件:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
有没有一种简单的方法可以提供多个可以从命令行(或者在我的例子中是 ADO 管道)轻松构建的“配置”或“目标”,以便我可以支持我的其他配置?例如:
<!-- Other configuration (multi-file), somehow -->
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
根据 Pavel 的评论,我找到了一些相关信息。
- MSDN How to: Build the Same Source Files with Different Options
- MSDN MSBuild Properties
- How do I use custom variables in MSBuild scripts?
然后,在 .NET application publishing overview 之后,我设置了自定义 属性 (flavor
) 来控制构建:
<!--
Default flavor is SINGLEBINARY
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/msbuild/how-to-build-the-same-source-files-with-different-options?view=vs-2015
-->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">SINGLEBINARY</Flavor>
</PropertyGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<!-- If flavor is SINGLEBINARY, output a standalone EXE -->
<PropertyGroup Condition="'$(Flavor)'=='SINGLEBINARY'">
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
<!-- If flavor is MULTIBINARY, output a more-typical dotnet DLL -->
<PropertyGroup Condition="'$(Flavor)'=='MULTIBINARY'">
<!-- No specific options; the default publish works. -->
</PropertyGroup>
我现在可以基于此进行单独的构建和发布 属性:
dotnet build /p:flavor=singlebinary # single-binary; self-contained EXE for easy sharing
dotnet build /p:flavor=multibinary # multi-binary
dotnet publish --configuration Release /p:flavor=singlebinary
dotnet publish --configuration Release /p:flavor=multibinary
我有一个简单的 .NET Core .csproj
用于我想以两种方式部署的项目:
- 作为一个自包含的、修剪过的单文件二进制文件(一个可移植的
mytool.exe
,没有其他文件) - 作为未修剪的多文件 DLL(
dotnet mytool.dll
,文件夹中还有其他一些支持 DLL)
我想这样做是因为单文件 .NET Core 二进制文件的冷启动速度非常慢。我希望这个工具尽可能便携,所以我需要一个单文件 .NET Core 二进制文件,但我也想让用户在不需要便携性的情况下更快地调用 dotnet mytool.dll
。
我已经配置了我的工具来构建一个独立的、修剪过的、单一文件的二进制文件:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
有没有一种简单的方法可以提供多个可以从命令行(或者在我的例子中是 ADO 管道)轻松构建的“配置”或“目标”,以便我可以支持我的其他配置?例如:
<!-- Other configuration (multi-file), somehow -->
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
根据 Pavel 的评论,我找到了一些相关信息。
- MSDN How to: Build the Same Source Files with Different Options
- MSDN MSBuild Properties
- How do I use custom variables in MSBuild scripts?
然后,在 .NET application publishing overview 之后,我设置了自定义 属性 (flavor
) 来控制构建:
<!--
Default flavor is SINGLEBINARY
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/msbuild/how-to-build-the-same-source-files-with-different-options?view=vs-2015
-->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">SINGLEBINARY</Flavor>
</PropertyGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<!-- If flavor is SINGLEBINARY, output a standalone EXE -->
<PropertyGroup Condition="'$(Flavor)'=='SINGLEBINARY'">
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
<!-- If flavor is MULTIBINARY, output a more-typical dotnet DLL -->
<PropertyGroup Condition="'$(Flavor)'=='MULTIBINARY'">
<!-- No specific options; the default publish works. -->
</PropertyGroup>
我现在可以基于此进行单独的构建和发布 属性:
dotnet build /p:flavor=singlebinary # single-binary; self-contained EXE for easy sharing
dotnet build /p:flavor=multibinary # multi-binary
dotnet publish --configuration Release /p:flavor=singlebinary
dotnet publish --configuration Release /p:flavor=multibinary