簡體   English   中英

基於目標平台的NuGet包的props中的DefineConstant

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM