我正在创建一个多平台应用程序。我有一个多目标共享库(针对 .netstandard 2.0 和 .net 4.5)...请参阅项目文件:
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
当我在 Windows 上的 Visual Studio 2017 中构建项目时,我在输出中得到两个目录(netstandard2.0、net45)和相应的 dll。构建成功。
当我在 Mac 上的 Visual Studio 2017 中构建完全相同的项目(相同的代码)时,我收到以下性质的错误:
类型“OptionAttribute”同时存在于“CommandLine.DotNetStandard,Version=1.0.30”和“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 上似乎没有观察到这种情况。这是 Mac 上 Visual Studio 的已知错误吗?难道我做错了什么?
在这些情况下,Visual Studio 会忽略该条件。用一个Choose/When
相反,应该完全支持:https://msdn.microsoft.com/en-us/library/ms164282.aspx 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)