Поддерживает ли Visual Studio 2008 настройки (отладка / сборка выпуска) конкретных ссылок?

У меня есть собственный проект C++ с одним файлом C++/CLI (единственный файл, скомпилированный с /CLI), я хотел бы добавить ссылку на C# DLL.

Существуют отдельные версии для отладки и выпуска, но я могу только добавить одну ссылку, которая применяется ко всем конфигурациям. Диалоговое окно пути поиска ссылок содержит предупреждение о том, что если я попытаюсь использовать какие-либо параметры типа $ConfigurationName, они будут когда-либо ссылаться только на первую конфигурацию в проекте.

Итак, мои текущие идеи:

  • Объедините два проекта вместе в одном решении и добавьте ссылку на "проект", а не сборку DLL. Насколько я понимаю, Visual Studio будет соответствовать конфигурации. Не идеально, так как мой проект и DLL "принадлежат" разным областям.
  • Один проект для отладки (только с конфигурацией отладки) и проект выпуска (только с конфигурацией выпуска), но это похоже на упущение.

Какие-нибудь более чистые способы достигнуть определенных ссылок конфигурации в Visual Studio 2008?

1 ответ

Решение

Обычно я задаю путь вывода для всех проектов в одном и том же месте в зависимости от конфигурации. Например, для релизных сборок все идет в /path/to/Release и для Debug в /path/to Debug. Затем я вручную редактирую файл проекта, чтобы включить отдельный файл целей, содержащий что-то вроде этого:

edit показывает, как использовать условия для выбора отладки / выпуска dll с префиксом

<-- file myDll.targets -->
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
  <ItemGroup  Condition=" '$(Configuration)' == 'Debug' ">
    <Reference Include="myDll_d">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup  Condition=" '$(Configuration)' == 'Release' ">
    <Reference Include="myDll">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
</Project>

Затем в проект, который должен ссылаться на эту dll, включен файл целей:

<Import Project="myDll.targets"/>

Потому что Private=false msbuild не будет пытаться скопировать что-либо, он просто ищет myDll.dll и найдет его в выходном пути.

Это не особенно чисто, но работает. Файл целей также может быть изменен для ссылки на разные платформы (x86/x64).

Ваша первая идея, вероятно, заключается в том, что в основном используется, поскольку требует меньше хлопот, за исключением того, что проекты должны быть в одном решении (насколько я знаю);

Другие вопросы по тегам