2009-11-23 1 views
46

У меня есть проект, который добавляет некоторую расширяемость в другое приложение через их API. Тем не менее, я хочу иметь возможность использовать один и тот же проект для нескольких версий своего приложения, потому что большая часть кода такая же.Есть ли способ указать ссылки на сборку на основе конфигурации сборки в Visual Studio?

Однако для каждой версии приложения требуется ссылка на соответствующую сборку для этой версии программного обеспечения. Они загружают свои сборки в GAC, поэтому, даже если бы я мог указать версию сборки для использования на основе конфигурации сборки, я был бы в порядке. Есть ли способ сделать это изнутри VS или мне нужен внешний инструмент сборки?

ответ

54

Существует способ сделать это, но вам придется вручную редактировать файлы проектов. Файлы проекта могут иметь атрибут Condition, применяемый к ним во многих элементах, в том числе и для ссылок.

Вы можете добавить их в вашу ссылку, чтобы указать, когда задание должно быть использовано:

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'"> 
</Reference> 
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'"> 
</Reference> 
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'"> 
</Reference> 

Вы затем определить несколько конфигураций сборки (V1, V2, V3) и каждая ссылка будет включена только в соответствующем выбранную конфигурацию сборки.

Объедините это с условными символами компиляции и #if инструкциями в коде, и вы сможете делать то, что хотите.

Следует обратить внимание на то, что вы можете легко удалить Visual Studio из условных атрибутов из файла проекта.

+0

Это отлично работает, тонны. Даже Visual Studio отлично играет, пока я не играю с этими ссылками, включая функциональный Intellisense! – snicker

+7

Я использовал аналогичный подход, чтобы сделать ссылку на конфигурацию ссылок для версий Debug/Release. Я просто указал на версию выпуска, когда я добавил ссылку, а затем в «Блокнот» заменил «Release» в пути Hint с помощью '$ (Конфигурация)', а voila - ссылка обновляется автоматически до правильной целевой конфигурации! – awe

+3

@awe: Действительно, для большинства элементов в файле MSBuild действителен атрибут 'Condition'. – adrianbanks

9
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath> 
</Reference> 

Вы можете заменить путь подсказки со свойствами:

$ (конфигурация) эквивалентны Release/Debug или любой другой конфигурацией, у вас есть. $ (Platform) эквивалентна x86/x64/Любой процессор

Если конфигурация включает в себя любой CPU, то вам нужно будет поставить одинарные кавычки $ (Конфигурация)

Также обратитесь к параметрам состояния, на которые ссылается adrianbanks

+0

Спасибо, что это сработало для меня, тогда как решение @adrianbanks не разрешало пакеты при попытке построить – HostMyBus