Как сослаться на другую версию dll с MSBuild

У меня есть проект веб-приложения, который использует ряд стороннего dll's. Проблема - то, что dev/staging среда составляет 32 бита, но производство составляет 64 бита. По сути, мы должны повторно сослаться и создать решение каждый раз, когда мы хотим развернуться. Я теперь желаю автоматизировать это, но не уверенный, как пойти об этом с MSBuild?

Весь другой dll's является тем же, просто 3 сторонних dll's.


Править

Я сделал некоторый прогресс, однако придумываю некоторые проблемы блока во время выполнения.

У меня есть 3 dll файла, 1.dll, 2.dll, 3.dll. Версия файла 5.1 для каждого. Для 64 битов dlls, имена являются точно тем же, просто версии файла различия. То, что я сделал, переименовано в каждого к 1.v5.dll, 1.v6.dll и т.д. В моих файлах проекта я тогда ссылаюсь на каждый dll следующим образом:

<Reference Include="1.v5.dll" Condition="'$(Platform)'=='x86'">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>bin\1.v5.dll</HintPath>
  <Private>False</Private>
</Reference>
<Reference Include="1.v6.dll" Condition="'$(Platform)'=='x64'">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>bin\1.v6.dll</HintPath>
  <Private>False</Private>
</Reference>

Это работает в IDE Visual Studio, и мое решение компилирует файл, однако когда я иду для выполнения веб-сайта, я получаю следующую ошибку...

"Не мог загрузить файл или блок '1.v5' или одна из его зависимостей. Явное определение расположенного блока не соответствует ссылке на сборку.

Какие-либо мысли о том, как приблизиться к этому?

33
задан mickyjtwin 5 January 2010 в 02:50
поделиться

2 ответа

Это то, что я понял, и, похоже, не работает проблемы.

Я создал 2 платформы решений: x86 и x64 . Я создал новую папку в каталоге моего решения под названием «Ссылки» и создал папку n x86 и x64: \ Ссылки \ x86 \ \ Ссылки \ x64 \ Затем по 3 библиотеки DLL для каждой помещаются в соответствующие каталоги.

Затем в каждый файл проекта я добавил следующие ссылки:

<Reference Include="{Reference1}" Condition="'$(Platform)'=='x86'">
  <HintPath>..\References\dlls\x86\{Reference1}.dll</HintPath>
</Reference>
<Reference Include="{Reference2}" Condition="'$(Platform)'=='x64'">
  <HintPath>..\References\dlls\x64\{Reference2}.dll</HintPath>
</Reference>

Теперь, когда я разрабатываю в среде IDE, я работаю с соответствующей DLL, соответствующей моим потребностям.

Затем я только что добавил событие после сборки, которое копирует dll на основе переменной $ (Platform) в каталог bin.

20
ответ дан 27 November 2019 в 18:15
поделиться

В файле проекта можно создавать условные ссылки следующим образом:

<Reference Include="32bit.dll" Condition="'$(Platform)'=='x86'"/>
<Reference Include="64bit.dll" Condition="'$(Platform)'=='x64'"/>

Для использования этого внутри VS необходимо создать две платформы решения: одну для x86-мишени и одну для x64-мишени. В зависимости от активной платформы будет выбрана одна из dll, нет необходимости в повторных ссылках.

Чтобы автоматизировать это с помощью msbuild, создайте новый проектный файл, который собирает другой проектный файл несколько раз, каждый раз для другой платформы/конфигурации/...:

<Target Name="BuildAll">
  <MSBuild Targets="myproject.proj" Properties="Platform=x86;Configuration=Debug"/>
  <MSBuild Targets="myproject.proj" Properties="Platform=x64;Configuration=Debug"/>
  <MSBuild Targets="myproject.proj" Properties="Platform=x64;Configuration=Release"/>
</Target>

Посмотрите на ссылку в задаче MSBuild для условных опций, таких как параллельная сборка.

.
39
ответ дан 27 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: