Visual Studio 2010 Компиляция с использованием версии Debug или Release сторонней библиотеки в зависимости от того, компилируется ли мой проект Build или Release? - PullRequest
39 голосов
/ 30 марта 2011

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

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

Ответы [ 4 ]

63 голосов
/ 02 сентября 2011
<Reference Include="MyLib">
   <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
</Reference>
37 голосов
/ 30 марта 2011

Вы можете редактировать файл 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>

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

8 голосов
/ 18 августа 2014

Ответ от 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, Visual Studio будет искать в выходной папке проектов. Таким образом, вы можете сделать это:

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


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

0 голосов
/ 30 марта 2011

Да, но, вероятно, не изначально внутри 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...