[英]DefineConstant in NuGet package's props based on the target platform
我正在构建一个多目标 NuGet package 并且我希望它为消费者提供一个编译常量:
<TargetFrameworks>Xamarin.Mac20;netstandard2.0;uap10.0.17763</TargetFrameworks>
我希望某个功能仅适用于其中两个目标。 为此,我定义了一个自定义常量:
<PropertyGroup Condition="$(TargetFramework.StartsWith('uap10.0.17763')) Or $(TargetFramework.StartsWith('Xamarin.Mac'))">
<DefineConstants>$(DefineConstants);FEATURE_AVAILABLE</DefineConstants>
</PropertyGroup>
现在我不仅想在我当前的程序集中使用这个常量,我想从中创建一个 package,而且还想在消费者项目中使用。 为此,我创建了一个Common.props
文件并将其包含在 package 中:
<Import Project="Common.props" />
<ItemGroup>
<None Include="Common.props" Pack="true" PackagePath="build" />
</ItemGroup>
构建后,我可以确认我的Common.props
已添加到 package 并且我可以在主项目中成功使用它。
主项目针对与 package 项目相同的 3 个平台。 现在我只想使用从 package 导入的FEATURE_AVAILABLE
,所以我只能使用 package 中的可用代码。
问题是它不尊重在我的主项目中包装DefineConstants
指令的平台条件,就像它在 MSBuild 知道它将为其构建的目标框架之前执行的一样。 如果我删除条件,则常量在我的主项目代码中可用。 在条件到位的情况下,它不是。
事实证明 Nuget 不尊重Xamarin.Mac20
作为目标名称,尽管 dotnet 本身确实如此。 恢复包时,Nuget 会生成自己的PROJECT_NAME.csproj.nuget.g.props
文件,其中包括以下行(已清理和清理):
<ImportGroup Condition=" '$(TargetFramework)' == 'xamarinmac20'">
<Import Project="$(NuGetPackageRoot)MY_NUGET_NAME/VERSION/build/FILE.props" />
</ImportGroup>
将目标框架从Xamarin.Mac20
更改为xamarinmac20
解决了该问题。 我真的不想为我所有的依赖项目都这样做,所以我要么手动包含完整的导入行,要么找到一种方法来配置 Nuget 以满足我的需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.