Visual Studio Community 2017 中的条件引用
Conditional reference in Visual Studio Community 2017
我正在创建一个多平台应用程序。我有一个多目标共享库(针对 .netstandard 2.0 和 .net 4.5)...参见项目文件:
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
当我在 visual studio 2017 年 windows 上构建项目时,我在输出中得到两个目录(netstandard2.0、net45)和相应的 dll。构建成功。
当我在 visual studio 2017 年在 mac 上构建完全相同的项目(相同的代码)时,我得到了这种性质的错误:
The type 'OptionAttribute' exists in both 'CommandLine.DotNetStandard, Version=1.0.30' and 'CommandLine, Version=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 上似乎没有观察到这种情况。这是 visual studio 在 mac 上的已知错误吗?我做错了什么吗?
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>
如果 MsBuild 仅考虑您的第一个 <Choose/>
或条件,那么您需要这样做:
<Choose>
<When Condition="'$(Configuration)'=='Debug'">
<ItemGroup>
<ProjectReference Include="..\path\to_your_project.csproj" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Package-Name" Version="1.0.0"/>
</ItemGroup>
</Otherwise>
</Choose>
我正在创建一个多平台应用程序。我有一个多目标共享库(针对 .netstandard 2.0 和 .net 4.5)...参见项目文件:
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
当我在 visual studio 2017 年 windows 上构建项目时,我在输出中得到两个目录(netstandard2.0、net45)和相应的 dll。构建成功。
当我在 visual studio 2017 年在 mac 上构建完全相同的项目(相同的代码)时,我得到了这种性质的错误:
The type 'OptionAttribute' exists in both 'CommandLine.DotNetStandard, Version=1.0.30' and 'CommandLine, Version=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 上似乎没有观察到这种情况。这是 visual studio 在 mac 上的已知错误吗?我做错了什么吗?
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>
如果 MsBuild 仅考虑您的第一个 <Choose/>
或条件,那么您需要这样做:
<Choose>
<When Condition="'$(Configuration)'=='Debug'">
<ItemGroup>
<ProjectReference Include="..\path\to_your_project.csproj" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Package-Name" Version="1.0.0"/>
</ItemGroup>
</Otherwise>
</Choose>