Компиляция Visual Studio 2010 с версией отладки или выпуска сторонней библиотеки в зависимости от того, скомпилирован ли мой проект Build или Release?
Теперь я загрузил несколько сторонних библиотек (dll) для Visual Studio 2010/С#, и я заметил, что в их каталоге дистрибутивов \bin у них обычно есть две версии Debug и Release.
Есть ли способ добавить эти библиотеки в качестве ссылок на проект, но использовать сборку Release (когда я создаю выпуск) и использовать сборку Debug (когда я отлаживаю)?
Ответы
Ответ 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>