c# - MSBuild 设置属性以影响项目依赖项的恢复/构建
问题描述
我有一个共享库,.Net 5 和 .Net Framework 4.8 项目都需要使用它。由于构建过程中的其他复杂性,不可能简单地TargetFrameworks
在共享库中定义多个,所以我想使用一个MSBuild
属性来动态设置共享库是否应该针对 .Net 5 或 .Net Framework 4.8。这种方法在我通过 MSBuild ( /p:Net48=True
) 传递标志属性时有效,但在我直接在 csproj 文件中定义 MSBuild 属性时无效。
下面是我正在尝试做的一个简单示例:
项目一:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\C\C.csproj" />
</ItemGroup>
</Project>
项目B:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<Net48>True</Net48>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\C\C.csproj" />
</ItemGroup>
</Project>
项目 C(共享库):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework Condition="'$(Net48)' == ''">net5.0</TargetFramework>
<TargetFramework Condition="'$(Net48)' != ''">net48</TargetFramework>
</PropertyGroup>
</Project>
运行会在失败dotnet build B.csproj /p:Net48=True
时构建项目。dotnet build B.csproj
属性定义不应该<Net48>True</Net48>
与设置标志具有相同的影响吗?
解决方案
属性定义 True 不应该与设置标志具有相同的影响吗?
否 - 项目 A 中设置的属性不会传播到项目 A 引用的项目,因此当您执行时,项目 C 中未定义dotnet build B.csproj
该属性Net48
。但是,命令行上设置的属性全局应用于所有项目(并优先于设置的属性值静态地在项目文件中)这就是为什么在命令行上设置它起作用的原因。
在这种情况下,您实际上不需要任何特殊的条件逻辑,因为 SDK 样式的项目支持为多个目标框架构建。
只需将您的项目 C 更改为以下内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- See https://docs.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#targetframeworks -->
<TargetFrameworks>net48;net5.0</TargetFrameworks>
</PropertyGroup>
<Target Name="DisplayTargetInfo" BeforeTargets="Build">
<Message Importance="high" Text="$(MSBuildProjectName) TargetFramework = $(TargetFramework)" />
</Target>
</Project>
推荐阅读
- r - r 令牌中的 HTTR POST
- mongodb - 如何在 mongoDB 中进行深层查找?深 >2
- python - 如何在我的 python 代码中为电报机器人添加标志?
- windows - Windows smbios 上的踢脚线资产标签
- javascript - 如何使用 pyodide 在项目中导入模块而不会出错?
- flutter - 如何在 Flutter 中实现这种类型的 Button?
- tensorflow - Tensorflow/AI 云平台:HyperTune 试验未能报告超参数调优指标
- lua - 使用 LOVE2D 制作平台游戏 - 垂直关卡在某个点之后没有碰撞
- amazon-web-services - 如何设置 AWS CloudWatch 事件规则以在多个 Step Functions 上触发
- angular - ajax post调用后如何避免302重定向的CORS问题?