Подтвердить что ты не робот

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

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

Все остальные dll одинаковы, только 3 сторонних dll.


ИЗМЕНИТЬ

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

У меня есть 3 файла dll, 1.dll, 2.dll, 3.dll. Версия файла 5.1 для каждого. Для 64-битных dll имена одинаковы, а только версии разного файла. То, что я сделал, переименовано в файл 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>

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

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

Любые мысли о том, как подойти к этому?

4b9b3361

Ответ 1

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

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

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

<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, специфичной для моих потребностей.

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

Ответ 2

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

<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 для дополнительных параметров, например, параллельное создание.