Может ли VS.NET 2010 / MSBUILD создавать XmlSerializer для .NET 3.5 SP1?

Я только что обновил решение VS 2008, содержащее WinForms, библиотеки общего пользования и веб-приложение, до VS 2010, но все проекты по-прежнему нацелены на .NET 3.5 SP 1. Я использую этот метод для генерации XmlSerializer для моих библиотек общего пользования. Приложение WinForms работает нормально. Когда мое веб-приложение пытается запустить с использованием этих библиотек, которые ссылаются на один и тот же XmlSerializer, оно выдает следующее:

Ошибка сервера в ' Заявка. Не удалось загрузить файл или сборка 'Ceoimage.Basecamp.XmlSerializers' или одна из его зависимостей. Эта сборка построен во время выполнения более новой, чем в настоящее время загружена среда выполнения и не может быть загружен. Описание: необработанный исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и где он возник в коде.

Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или сборку «Ceoimage.Basecamp.XmlSerializers» или одну из ее зависимостей. Эта сборка создается средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.

Я просмотрел ссылки на XmlSerializer с помощью .NET Reflector и вижу, что он ссылается как на версии 2.0, так и 4.0 [ mscorlib , а также 3.5 и 4.0 версии System.Data.Linq . Как ни странно, он использует только версию 4.0 System.Xml . Вероятно, в этом моя проблема.

Как я могу заставить веб-приложение работать с этими XmlSerializer? Когда я просто удаляю эти XmlSerializer, веб-приложение работает нормально. Это вариант, но как я могу заставить MSBUILD создавать сериализаторы для определенной версии CLR?

Вот задача MSBuild, которую я добавляю в файлы проекта, которая вызывает создание XmlSerializer:


 
 
  
 

12
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Я обнаружил, что могу явно указать путь инструментов задачи SGEN для использования версии 3.5, например так:

<SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin">
2
ответ дан 2 December 2019 в 21:42
поделиться

Вы полагаетесь на что-то конкретное для 4.0?

Если вы запустите MSBuild 4.0, вы получите инструменты 4.0. Если вы вызовете MSBuild 3.5, вы получите инструменты 3.5 (это то, что вам нужно, поскольку вы явно размещаетесь в среде CLR 2.0).

Другой вариант — установить CLR версии 4.0 на свой веб-сервер. Если это не открыто, у вас не должно быть никаких материалов, ориентированных на 4.0, в вашем потоке.

2
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: