Условная ссылка в 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, я получаю ошибки такого рода:
Тип "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 кажется, что он не соблюдает условие. Это известная ошибка для Visual Studio на Mac? Я делаю что-то неправильно?
1 ответ
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>