Проект 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
Другие вопросы по тегам