У меня есть проект веб-приложения, который использует ряд стороннего 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' или одна из его зависимостей. Явное определение расположенного блока не соответствует ссылке на сборку.
Какие-либо мысли о том, как приблизиться к этому?
Это то, что я понял, и, похоже, не работает проблемы.
Я создал 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.
В файле проекта можно создавать условные ссылки следующим образом:
<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 для условных опций, таких как параллельная сборка.
.