2

我正在創建一個多平臺應用程序。我有一個多目標的共享庫(針對.netstandard 2.0和.NET 4.5)...查看項目文件:Visual Studio Community 2017中的條件引用

<PropertyGroup> 
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks> 
    </PropertyGroup> 

當我建立在Windows的Visual Studio 2017年的項目,我得到兩個目錄中輸出(netstandard2.0,net45)和相應的dll。構建是成功的。

當我建立在Visual Studio 2017年完全相同的項目(相同的代碼)在Mac上,我得到這個性質的錯誤:

類型「OptionAttribute」兩個「CommandLine.DotNetStandard,版本存在= 1.0.30' 和 '的CommandLine,版本= 1.9.71.2'

我有條件地以下面的方式引用的命令行分析器庫:

<!-- CommandLineParser library --> 
    <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> 
    <PackageReference Include="CommandLine.DotNetStandard"> 
     <Version>1.0.3</Version> 
    </PackageReference> 
    </ItemGroup> 

    <ItemGroup Condition="'$(TargetFramework)' == 'net45'"> 
    <PackageReference Include="CommandLineParser"> 
     <Version>1.9.71</Version> 
    </PackageReference> 
    </ItemGroup> 

這適用於Windows,但在Mac上它看起來並不遵守條件。這是在mac上的視覺工作室的已知錯誤?難道我做錯了什麼?

回答

4

Visual Studio忽略這些情況下的情況。使用Choose/When相反,應該全力支持:https://msdn.microsoft.com/en-us/library/ms164282.aspx

<Choose> 
    <When Condition=" '$(TargetFramework)' == 'netstandard2.0' "> 
    <ItemGroup> 
     <PackageReference Include="CommandLine.DotNetStandard"> 
     <Version>1.0.3</Version> 
     </PackageReference> 
    </ItemGroup> 
    </When> 
    <When Condition=" '$(TargetFramework)' == 'net45' "> 
    <ItemGroup> 
     <PackageReference Include="CommandLineParser"> 
     <Version>1.9.71</Version> 
     </PackageReference> 
    </ItemGroup> 
    </When> 
</Choose> 
+0

沒錯,但太糟糕了,根本的MSBuild默默地忽略的條件,從而掩蓋了真正的問題。 –

相關問題