Если вы всегда развертываете в Azure с 64-разрядной машины, вы можете изменить файл проекта, чтобы скопировать правильную DLL в папку bin во время сборки на основе типа процессора машины, выполняющей сборку. Это прекрасно работает для нас, потому что мы развертываем в Azure с 64-битного сервера сборки. Если это звучит как хорошее решение, выполните следующие действия:
1 - Создать внешнюю папку lib, которая содержит две подпапки с именами 32 и 64.
2 - Поместите 32-разрядную версию DLL в папку 32, а 64-разрядную версию в папку 64.
3 - Откройте поврежденный файл проекта в текстовом редакторе.
4 - Добавьте следующий узел в файл проекта сразу после ItemGroup, которая содержит элементы «reference include». Это скопирует правильную DLL на основе системных переменных среды:
<ItemGroup>
<DllToCopy Condition=" '$(PROCESSOR_ARCHITECTURE)' == 'x86' And '$(PROCESSOR_ARCHITEW6432)' == '' " Include="..\ext-lib\32\mydll.dll" />
<DllToCopy Condition=" '$(PROCESSOR_ARCHITECTURE)' == 'AMD64' Or '$(PROCESSOR_ARCHITEW6432)' == 'AMD64' " Include="..\ext-lib\64\mydll.dll" />
</ItemGroup>
5 - Наконец, измените цель проекта BeforeBuild следующим образом:
<Target Name="BeforeBuild">
<Copy SourceFiles="@(DllToCopy)" DestinationFolder="$(OutputPath)" />
</Target>
Другой вариант - скопировать правильную DLL в папку bin на основе конфигурации сборки (менее идеальной). Например, если бы у вас была конфигурация сборки с именем Production, вы бы выполнили шаги, описанные выше, за исключением того, что шаг 4 будет содержать это:
<ItemGroup>
<DllToCopy Condition=" '$(Configuration)' != 'Production' " Include="..\ext-lib\32\mydll.dll" />
<DllToCopy Condition=" '$(Configuration)' == 'Production' Include="..\ext-lib\64\mydll.dll" />
</ItemGroup>
Еще одним (и даже менее идеальным) вариантом будет копирование 64-разрядной версии DLL в папку bin с помощью задачи запуска Azure.
Надеюсь, это поможет.