Проект Visual Studio: как включить ссылку только на одну конфигурацию?
Env.: VS2008 C# проект
Мне нужно собрать свое приложение для использования в 2 разных средах. В одной из этих сред мне нужно использовать стороннюю сборку DLL.
Я мог бы изолировать код, который использует эту DLL, используя блоки #if. Но как мне условно включить ссылку на DLL в файл проекта CS?
Редактировать: Womp имеет хороший момент в своем комментарии. Я превратился в отдельный вопрос: будет ли загруженная DLL-библиотека вообще загружаться, если она никогда не вызывается? ТИА,
4 ответа
Выгрузите проект и откройте его как.XML
Найдите тег ссылочного элемента и добавьте атрибут Condition.
Например:
<ItemGroup>
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
<Reference Include="MyUtilities.Debug"
Condition="'$(Configuration)'=='Debug'"/>
</ItemGroup>
Обратите внимание, что последняя ссылка теперь имеет условие.
Я знаю, что это старый пост, но в случае, если кто-то еще найдет его, прежде чем найдет ответ, как я это сделал, это так: вам нужно использовать элемент "Выбрать" в файле проекта:
Вы можете определять как условные ссылки, так и условную компиляцию в одном месте, поэтому вам не нужно использовать #if в вашем коде.
Он работает в SharpDevelop, и, поскольку это документация MS, я предполагаю, что он работает в Visual Studio.
Следующее, в группе элементов ссылок на файлы csproj работает в vs 2008 для меня:-
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Debug' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Visual Studio User Library\Debug\DRLClasses.dll</HintPath>
</Reference>
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Release' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Visual Studio User Library\Release\DRLClasses.dll</HintPath>
</Reference>
Вдохновленный вопросом и ответом, показанным здесь, вы можете добавить <Choose>
а также <When Condition>
команды вокруг части, которую вы хотите запустить условно. Например:
<Choose>
<When Condition="$(USEDLL) == true">
<ItemGroup>
<EmbeddedResource Include="test.dll">
<LogicalName>test.dll</LogicalName>
</EmbeddedResource>
</ItemGroup>
</When>
</Choose>
Затем в CLI просто используйте /p
Свойство в MSBuild, как это:
MSBuild "C:\myproject\myproject.sln" /p:USEDLL=true
... или если вы не хотите DLL, просто:
MSBuild "C:\myproject\myproject.sln" /p:USEDLL=false