Да, важно, что сборка XmlSerializer не находится в каталоге bin. Используя Fusion Log Viewer, я подтвердил свое подозрение, что DLL не загружалась, когда она оставалась в корне веб-приложения.
Чтобы исправить это, вы можете добавить цель AfterBuild, которая перемещает файл в правильное местоположение. Я использую следующий фрагмент, но в более новых версиях MsBuild есть задача Move:
<Target Name="AfterBuild">
<!-- Don't do this when the final destination is the same as build destination (local builds) -->
<Exec Command="move /Y "$(WebProjectOutputDir)\$(AssemblyName).XmlSerializers.dll" "$(WebProjectOutputDir)\bin"" Condition="'$(OutDir)' != '$(OutputPath)'"/>
</Target>
Примечание. Если вы создаете и запускаете веб-приложение из одного каталога (как это обычно происходит при локальном запуске на компьютере разработчика) и для параметра проекта «Создать сборку сериализации» установлено значение «Вкл.», Файл создается в каталоге bin. Вот почему я настроил задачу, чтобы она не выполнялась в этом случае.
Я мог бы просто убедиться, что файл существует, но я хотел убедиться, что сборка не удалась, если по какой-то причине файл не находился в ожидаемом месте во время интеграционных сборок.