Как ссылаться на другую версию 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 "или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку.
Любые мысли о том, как подойти к этому?
Ответы
Ответ 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 для дополнительных параметров, например, параллельное создание.