gpt4 book ai didi

c# - 如何为所有目标框架发布

转载 作者:太空狗 更新时间:2023-10-30 00:48:43 25 4
gpt4 key购买 nike

我正在 TeamCity 中为 .Net Core 项目构建一组构建模板。除了控制台项目外,一切都运行良好。问题是当我去发布解决方案时,我需要指定框架版本。在构建的任何其他阶段,我都不需要了解框架。至少在发布 .sln 文件时是这样,控制台项目只有一个目标框架。

所以现在我需要弄清楚控制台项目应该针对哪个框架。我可以阅读各种 XML 文件,但我希望我不需要。是否有一些内置方法可以查询给定解决方案所使用的框架?

例如,像 (PowerShell)

$frameworks = & dotnet.exe --<what I want> .\MySolution.sln
for ($framework in $frameworks) {
& dotnet.exe publish -f $framework .\MySolution.sln
}

这样我就不需要在每次使用新框架时都修改构建系统。我在 CLI 存储库中四处寻找,但找不到满足我需要的命令。打开 .csproj 文件是我唯一的希望吗?

最佳答案

如果您想要发布针对多个框架的项目,默认的 Publish 目标会失败,但您可以创建一个自定义目标来执行多目标本身。为此,请在解决方案文件夹中创建一个名为 Directory.Build.props 的文件(MSBuild > 15.1 这可以而且应该命名为 Directory.Build.targets 因为那里有 was a bug with multi-targeting projects ):

<Project>
<Target Name="PublishProjectIfFrameworkSet"
DependsOnTargets="Publish"
Condition=" '$(TargetFramework)' != '' " />

<Target Name="PublishProjectForAllFrameworksIfFrameworkUnset" Condition=" '$(TargetFramework)' == '' ">
<ItemGroup>
<_PublishFramework Include="$(TargetFrameworks)" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Publish" Properties="TargetFramework=%(_PublishFramework.Identity)" />
</Target>

<Target Name="PublishAll"
DependsOnTargets="PublishProjectIfFrameworkSet;PublishProjectForAllFrameworksIfFrameworkUnset" />
</Project>

然后您可以通过在解决方案目录中执行以下命令来发布所有已定义框架的项目:

$ dotnet msbuild /t:PublishAll /p:Configuration=Release
Microsoft (R) Build Engine version 15.1.1012.6693
Copyright (C) Microsoft Corporation. All rights reserved.

app2 -> /Users/martin/testproj/app2/bin/Release/netcoreapp1.1/app2.dll
app1 -> /Users/martin/testproj/app1/bin/Release/netcoreapp1.1/app1.dll
app1 -> /Users/martin/testproj/app1/bin/Release/netcoreapp1.0/app1.dll

关于c# - 如何为所有目标框架发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com