Подтвердить что ты не робот

Компиляция Visual Studio 2010 с версией отладки или выпуска сторонней библиотеки в зависимости от того, скомпилирован ли мой проект Build или Release?

Теперь я загрузил несколько сторонних библиотек (dll) для Visual Studio 2010/С#, и я заметил, что в их каталоге дистрибутивов \bin у них обычно есть две версии Debug и Release.

Есть ли способ добавить эти библиотеки в качестве ссылок на проект, но использовать сборку Release (когда я создаю выпуск) и использовать сборку Debug (когда я отлаживаю)?

4b9b3361

Ответ 1

Вы можете отредактировать файл csproj вручную, чтобы установить атрибут Condition в ItemGroup, содержащий ссылку.

  <ItemGroup Condition="'$(Configuration)' == 'Debug'">
    <Reference Include="MyLib">
      <HintPath>..\..\Debug\MyLib.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <Reference Include="MyLib">
      <HintPath>..\..\Release\MyLib.dll</HintPath>
    </Reference>
  </ItemGroup>

Смотрите эту статью для получения дополнительной информации.

Ответ 2

<Reference Include="MyLib">
   <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>

Ответ 3

Ответ WaffleSouffle определенно лучше, если вы используете папку Release и Debug, как утверждает исходный вопрос.

Кажется, есть еще один вариант, который не столь очевиден, потому что VS (VS2010) не показывает его в IntelliSense при редактировании csproj файла.

Вы можете добавить условие к элементу HintPath. Вот так:

<Reference Include="MyLib">      
      <HintPath Condition="'$(Configuration)'=='Release'">..\lib\MyLib.dll</HintPath>
      <HintPath Condition="'$(Configuration)'=='Debug'">..\lib\Debug\MyLib.dll</HintPath>
</Reference>

Я нашел статью Вивека Ратода, описывающую описанный выше подход http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html.

Я проверил файл схемы XMS для файла проекта по адресу:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild\Microsoft.Build.Core.xsd а также: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild\Microsoft.Build.Commontypes.xsd

Я не вижу, что Condition является поддерживаемым атрибутом для элемента HintPath, но он, похоже, работает.....

РЕДАКТИРОВАТЬ 1: Это не приводит к тому, что ссылка появляется дважды в Visual Studio, что является проблемой с принятым ответом.

ИЗМЕНИТЬ 2: На самом деле, если вы опускаете HintPath alltogether, Visual Studio будет искать в выходной папке проектов. Поэтому вы можете это сделать:

<Reference Include="MyLib">        
     <!-- // Removed HintPath, VS looks for references in $(OutDir) --> 
</Reference> 


Порядок поиска указан в файле Microsoft.Common.targets
Видеть: HintPath vs ReferencePath в Visual Studio

Ответ 4

Да, но, вероятно, не изначально внутри VS2010. Вы можете отредактировать файл .csproj и использовать атрибуты Condition для создания ссылок на Release или Debug.

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <HintPath>..\lib\Debug\MyLib.dll</HintPath>
</Reference>

или

<Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <HintPath>..\lib\Release\MyLib.dll</HintPath>
</Reference>