2

다중 플랫폼 응용 프로그램을 만들고 있습니다. 나는 창에서 Visual Studio 2017에서 프로젝트를 빌드 할 때Visual Studio 커뮤니티의 조건부 참조 2017

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

, 나는이 두 디렉토리를 얻을 : 나는 다중 표적 공유 라이브러리 (2.0 및 .NET 4.5을 .netstandard 대상) ... 프로젝트 파일을 참조하십시오이 출력 (netstandard2.0, net45) 및 해당 dll. 빌드는 성공입니다. 나는 맥에서 Visual Studio 2017에서 동일한 프로젝트 (동일한 코드)를 빌드 할 때

, 나는 이런 종류의 오류를 얻을 :

유형 'OptionAttribute는'모두 'CommandLine.DotNetStandard 버전에 존재

= 1.0.30 '과'커맨드, 버전 = 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에서 Visual Studio의 알려진 버그입니까? 내가 뭔가 잘못하고 있는거야?

답변

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를 단순히 자동으로 따라서 실제 문제를 마스킹 조건을 무시합니다. –