2

私はマルチプラットフォームアプリケーションを作成しています。私は、(2.0および.NET 4.5 .netstandardターゲット)の多標的共有ライブラリを持っている...プロジェクトファイルを参照してください:私はWindows上のVisual Studio 2017でプロジェクトをビルドすると、私は2つのディレクトリを取得Visual Studio Communityの条件付きリファレンス2017

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

を出力(netstandard2.0、net45)と対応するdll。ビルドは成功です。

私はMac上のVisual Studio 2017年に正確に同じプロジェクト(同じコード)を構築するとき、私はこのような性質のエラーを取得:

タイプは「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> 

これはウィンドウズにはうってつけですが、Macではそれが条件を観測していないようです。これはMac上のVisual Studioの既知のバグですか?私は何か間違っているのですか?

答えて

4

これらの場合、Visual Studioは条件を無視します。ええ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のは、単に黙っので、実際の問題をマスキング、条件を無視することにも悪い:Choose/When代わりに使用し、それは完全にサポートされなければなりません。 –

関連する問題