Создать сборку сериализации visual studio

Обновлено: 07.07.2024

Этот код создает исключение FileNotFoundException, но в конечном итоге выполняется без проблем:

Первое случайное исключение типа «System.IO.FileNotFoundException» произошло в mscorlib.dll

Дополнительная информация: не удалось загрузить файл или сборку 'MyAssembly.XmlSerializer, версия = 1.4.3190.15950, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей. Система не может найти указанный файл.

Похоже, что среда автоматически генерирует сборку сериализации, если она не найдена. Я могу сгенерировать ее вручную с помощью sgen.exe, что устраняет исключение.

Как заставить Visual Studio автоматически генерировать сборку сериализации XML?

Обновление: параметр «Создать сборку сериализации: настройка« Вкл », похоже, ничего не делает».

Решение

Вот как мне удалось это сделать, изменив скрипт MSBUILD в моем файле .CSPROJ:

Сначала откройте файл .CSPROJ как файл, а не как проект. Прокрутите до конца файла, пока не найдете этот закомментированный код, непосредственно перед закрытием тега Project:

Теперь мы просто вставляем нашу собственную цель AfterBuild для удаления любого существующего XmlSerializer и SGen, например, так:

Это работает для меня.

ДРУГИЕ СОВЕТЫ

Как объяснил Мартин в своем ответе , включения генерации сборки сериализации через свойства проекта недостаточно, потому что задача SGen добавляет ключ /proxytypes в командную строку sgen.exe.

Microsoft имеет задокументированное свойство MSBuild , которое позволяет отключить SGenUseProxyTypes переключает и заставляет задачу SGen генерировать сборки сериализации, даже если в сборке нет типов прокси.

Как видно из документации, вы должны вручную изменить файл проекта, но вы можете добавить свойство в свою конфигурацию, чтобы включить генерацию. Конфигурация файлов вашего проекта будет выглядеть примерно так:

В других ответах на этот вопрос уже упоминалось значение «Свойства проекта» - > Build - > Создать сборки сериализации , но по умолчанию это будет генерировать сборку только при наличии " Типы прокси-серверов веб-службы XML " в проекте.

Вы можете проверить результат этой задачи сборки в окне Visual Studio Вывод и выбрать Построить в раскрывающемся меню Показать вывод : коробка. Вы должны увидеть что-то вроде

C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ bin \ sgen.exe /assembly:D:\Temp\LibraryA\obj\Debug\LibraryA.dll / прокси-типы / ссылка: .. / компилятор: / delaysign- LibraryA - & Gt; D: \ Temp \ LibraryA \ Bin \ Debug \ LibraryA.dll

Ключевым моментом здесь является ключ / proxytypes . Вы можете прочитать о различных параметрах для инструмента генератора XML-сериализатора ( Sgen.exe)

Если вы знакомы с MSBuild, вы можете настроить цель GenerateSerializationAssemblies таким образом, чтобы задача SGen имела атрибут UseProxyTypes = " false " вместо правды, но затем вам нужно взять на себя всю ответственность за настройку системы Visual Studio / MSBuild. В качестве альтернативы вы можете просто расширить процесс сборки, чтобы он вызывал SGen вручную без ключа / proxytypes.

Если вы прочитаете документацию для SGen, они совершенно ясно, что Microsoft хотела ограничить использование этой возможности. Учитывая шум в этой теме, совершенно очевидно, что Microsoft не проделала большую работу по документированию опыта Visual Studio. Существует даже Connect Feedback элемент для этой проблемы и ответ не велик.

создание нового определения задачи sgen приводит к поломке колеса. просто установите необходимые переменные, чтобы задача работала как задумано. В любом случае, в документации Microsoft не хватает важной информации.

Шаги по предварительной генерации сборок сериализации

В файле .csproj сразу после элемента <TargetFrameworkVersion>v. </TargetFrameworkVersion> добавьте следующие элементы:

<SGenUseProxyTypes>false</SGenUseProxyTypes> <SGenPlatformTarget>$(Platform)</SGenPlatformTarget>

В файле .csproj, в каждой конфигурации платформы

например. <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">

добавьте следующую строку:

Эта процедура создает дополнительную сборку с именем .xmlSerializers.dll в вашей выходной папке. Вам нужно будет развернуть эту сборку вместе с вашим решением.

Описание

SGenPlatformTarget требуется для соответствия вашей PlatformTarget. Я склонен думать, что это ошибка в шаблоне проекта. Почему целевая платформа sgen должна отличаться от платформы вашего проекта? Если это произойдет, вы получите исключение во время выполнения

0x80131040: определение манифеста обнаруженной сборки не соответствует ссылке на сборку

Вы можете найти определение задачи msbuild, проанализировав файл своего проекта:

Просмотрите определение задачи SGen для TargetFrameworkVersion 4.0 из

чтобы увидеть недокументированные переменные, такие как $ (SGenPlatformTarget), которые вы можете установить в файле проекта

EDIT: То есть, конечно, это исключение происходило и раньше, но когда & Quot; включите только мой код & Quot; выключен, помощник по отладке (если включен) будет остановлен в этот момент при его выдаче.

Я немного опоздал на вечеринку, но мне было трудно работать с предыдущим ответом. В частности, Visual Studio зависал всякий раз, когда я пытался просмотреть свойства моего проекта. Я полагаю, это было связано с тем, что он больше не понимал, как читать файл csproj. Это сказал .

Добавьте следующее в командную строку события после сборки:

Это позволит использовать sgen.exe напрямую для перестройки сборки сериализации Xml каждый раз, когда вы создаете проект для Debug или Release.

Посмотрите в свойствах решения. На вкладке сборки внизу есть раскрывающийся список & Quot; Создать сборку сериализации & Quot;

Несколько отличное решение от резервного копирования мозга может заключаться в прямом указании цели платформы именно там, где вы должны использовать это так:

этот код создает исключение FileNotFoundException, но в конечном итоге работает без проблем:

первое случайное исключение типа "System.IO.FileNotFoundException" произошло в mscorlib.dll

дополнительная информация: не удалось загрузить файл или сборку ' MyAssembly.XmlSerializers, Version=1.4.3190.15950, Culture=neutral, PublicKeyToken=null ' или одна из его зависимостей. Система не может найти файл указанный.

похоже, что платформа автоматически создает сборку сериализации, если она не найдена. Я могу создать его вручную с помощью sgen.exe, что облегчает исключение.

как заставить visual studio автоматически создавать сборку сериализации XML?

обновление: сборка создания сериализации: при настройке, похоже, ничего не делает.

вот как мне удалось это сделать, изменив сценарий MSBUILD в моем.CSPROJ файл:

во-первых, открыть свой .CSPROJ файл как файл, а не как проект. Прокрутите до конца файла, пока не найдете этот закомментированный код, непосредственно перед закрытием тега проекта:

теперь мы просто вставляем нашу собственную цель AfterBuild, чтобы удалить любой существующий XmlSerializer и SGen наш собственный, например:

это работает для меня.

как следует из документации, вы должны изменить файл проекта вручную, но вы можете добавить SGenUseProxyTypes свойства конфигурации для создания. Конфигурация файлов проекта будет выглядеть примерно так:

создание нового определения задачи sgen ломает муху на колесе. просто установите необходимые переменные, чтобы заставить задачу работать по назначению. В любом случае в документации microsoft отсутствует важная информация.

шаги для предварительного создания сборок сериализации

  1. в Visual Studio 2010 в обозревателе решений щелкните правой кнопкой мыши проект, для которого вы хотите создайте сборки сериализации и нажмите кнопку выгрузить проект.
  2. в обозревателе решений щелкните правой кнопкой мыши проект, для которого требуется создать сборки сериализации, и выберите команду Изменить .csproj.
  3. в рамках .csproj файл, сразу после <TargetFrameworkVersion>v. </TargetFrameworkVersion> элемент, добавьте следующие элементы:

    <SGenUseProxyTypes>false</SGenUseProxyTypes> <SGenPlatformTarget>$(Platform)</SGenPlatformTarget>

в рамках .файл csproj, в каждой платформы конфигурация

например <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">

добавить следующую строку:

сохранить и закрыть .файл csproj.

эта процедура создает дополнительную сборку .xmlSerializers.DLL в папку вывода. Вам нужно будет развернуть эту сборку вместе с решение.

объяснение

SGen по умолчанию только для прокси-типов генерирует для "любого процессора". Это происходит, если вы не устанавливаете соответствующие переменные в файле проекта.

SGenPlatformTarget требуется, чтобы соответствовать вашей PlatformTarget. Я склонен думать, что это ошибка в шаблоне проекта. Почему целевая платформа sgen должна отличаться от платформы вашего проекта? Если это так, вы получите исключение времени выполнения

0x80131040: определение манифеста сборки расположены не соответствует ссылке на сборку

вы можете найти определение задачи msbuild, проанализировав файл проекта:

посмотрите внутри определения задачи SGen для TargetFrameworkVersion 4.0 от

установка Windows путь\Майкрософт.Чистая\рамки\В4.0.30319\Майкрософт.Используется CSharp.цели

чтобы увидеть недокументированные переменные, такие как $(SGenPlatformTarget), которые вы можете установить в своем файле проекта

в случае, если кто-то еще столкнется с этой проблемой внезапно после того, как все работало нормально раньше: для меня это было связано с тем, что флажок "Включить только мой код (только управляемый)" был снят в меню параметров (параметры - > отладка) (который был автоматически отключен после установки .NET Reflector).

изменить: То есть, конечно, это исключение происходило раньше, но когда" включить только мой код " выключен, помощник по отладке (если он включен) остановится на этом момент, когда брошен.

Я немного опоздал на вечеринку, но я нашел предыдущий ответ трудным для работы. В частности, Visual Studio будет аварийно завершать работу всякий раз, когда я пытался просмотреть свойства моего проекта. Я думаю, это было связано с тем, что он больше не понимал, как прочитать файл csproj. То, что сказал.

добавьте в командную строку события после сборки следующее:

это будет использовать sgen.исполняемые непосредственно перестроить сборку сериализации XML каждый раз, когда вы строите ваш проект для отладки или выпуска.

посмотреть в свойствах на решение. На вкладке сборка в нижней части есть выпадающий список под названием "создать сборку сериализации"

немного отличается от решения, предоставленного резервная копия мозга может быть, чтобы непосредственно указать цель платформы прямо там, где вы должны использовать его так:

этот код создает исключение FileNotFoundException, но в конечном итоге запускается без проблем:

исключение первого шанса типа ' System.ИО.FileNotFoundException ' произошло в mscorlib.dll файлы

дополнительная информация: не удалось загрузить файл или сборку " MyAssembly.XmlSerializers, Version=1.4.3190.15950, Culture=neutral, PublicKeyToken=null' или одна из его зависимостей. Система не может найти файл указанный.

похоже, что платформа автоматически генерирует сборку сериализации, если она не найдена. Я могу создать его вручную с помощью sgen.exe, который облегчает исключение.

как заставить visual studio автоматически создавать сборку сериализации XML?

Update: сборка сериализации Generate: on, похоже, ничего не делает.

вот как мне удалось это сделать, изменив сценарий MSBUILD в моем .Файл CSPROJ:

во-первых, открыть свой .Csproj файл как файл, а не как проект. Прокрутите до нижней части файла, пока не найдете этот закомментированный код, непосредственно перед закрытием тега проекта:

теперь мы просто вставляем нашу собственную цель AfterBuild, чтобы удалить любой существующий XmlSerializer и SGen наш собственный, например:

это работает для меня.

как объяснил Мартин в ответ, включение генерации сборки сериализации через свойства проекта недостаточно, потому что задача SGen добавляет /proxytypes переключитесь на sgen.командной строки exe-файла.

Microsoft имеет задокументированное свойство MSBuild что позволяет отключить /proxytypes switch и заставляет задачу SGen генерировать сборки сериализации, даже если в собрание.

как следует из документации, вы должны вручную изменить файл проекта, но вы можете добавить SGenUseProxyTypes свойства конфигурации для создания. Ваша конфигурация файлов проекта будет выглядеть примерно так:

другие ответы на этот вопрос уже упоминали свойства проекта - >Build ->Создание Сборок Сериализации настройка, но по умолчанию это будет генерировать сборку, только если есть"XML-веб-службы прокси-типов" в проекте.

вы можете проверить результат этой задачи сборки из Visual Studio выход

создание нового определения задачи sgen разрывает муху на колесе. просто установите необходимые переменные, чтобы задача работала по назначению. В любом случае в документации microsoft отсутствует важная информация.

шаги для предварительного создания сборок сериализации

  1. в Visual Studio 2010 в обозревателе решений щелкните правой кнопкой мыши проект, для которого вы хотите создайте сборки сериализации и нажмите кнопку выгрузить проект.
  2. в обозревателе решений щелкните правой кнопкой мыши проект, для которого требуется создать сборки сериализации, и нажмите кнопку Изменить .csproj файл.

в рамках .файл csproj, сразу после <TargetFrameworkVersion>v. </TargetFrameworkVersion> элемент, добавьте следующие элементы:

в рамках .файл csproj, в каждой платформы конфигурация

например <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">

добавить следующую строку:

сохранить и закрыть .файл csproj.

эта процедура создает дополнительную сборку .xmlSerializers.dll в выходной папке. Вам нужно будет развернуть эту сборку с помощью решение.

объяснение

SGen по умолчанию только для прокси-типов генерирует для "любого процессора". Это происходит, если вы не устанавливаете соответствующие переменные в файле проекта.

SGenPlatformTarget требуется, чтобы соответствовать вашему PlatformTarget. Я склонен думать, что это ошибка в шаблоне проекта. Почему целевая платформа sgen должна отличаться от платформы вашего проекта? Если это так, вы получите исключение времени выполнения

0x80131040: в определение манифеста сборки расположены не соответствует ссылке на сборку

вы можете найти определение задачи msbuild, проанализировав файл проекта:

посмотрите внутри определения задачи SGen для TargetFrameworkVersion 4.0 из

установка Windows путь\Майкрософт.Чистая\рамки\В4.0.30319\Майкрософт.Используется CSharp.цели

чтобы увидеть недокументированные переменные, такие как $(SGenPlatformTarget), вы можете установить в своем файле проекта

изменить: То есть, конечно, это исключение происходило раньше, но когда" включить только мой код " выключен, помощник по отладке (если включен) остановится на этом точка при броске.

Я немного опоздал на вечеринку, но я нашел предыдущий ответ трудным для работы. В частности, Visual Studio будет аварийно завершать работу всякий раз, когда я пытаюсь просмотреть свойства моего проекта. Я думаю, это было связано с тем, что он больше не понимал, как прочитать файл csproj. Вот и все.

добавьте в командную строку события после сборки следующее:

это будет использовать sgen.exe непосредственно для восстановления сборки сериализации Xml при каждом создании ваш проект для отладки или выпуска.

посмотрите в свойствах решения. На вкладке "сборка" внизу есть раскрывающийся список "создать сборку сериализации"

немного отличается от решения, предоставленного резервная копия мозга может быть, чтобы напрямую указать целевую платформу, где вы должны использовать ее так:

Этот код производит FileNotFoundException, но в конечном счете работает без проблем:

Вот это исключение:

Первое случайное исключение типа "System.IO.FileNotFoundException" произошло в mscorlib.dll

Дополнительная информация: не удалось загрузить файл или assembly 'MyAssembly.XmlSerializers, Version=1.4.3190.15950, Culture=neutral, PublicKeyToken=null' или одну из его зависимостей. Система не может найти указанный файл.

Похоже, что фреймворк автоматически генерирует сериализацию assembly, если она не найдена. Я могу сгенерировать его вручную, используя sgen.exe,что облегчает исключение.

Как заставить visual studio автоматически генерировать XML Serialization assembly?

Обновление: параметр Generate Serialization Assembly: On, похоже, ничего не делает.

Дубликат: это дубликат генерации Xml Serialization assembly как части моей сборки . Пожалуйста, закройте его как дубликат. Как я могу получить Visual Studio создать и внедрить XmlSerializer assembly в MSI-файл во время построения? Я надеюсь сократить время запуска моего приложения на пару секунд.

Как объяснил Мартин в своем ответе , включения генерации сериализации assembly через свойства проекта недостаточно, потому что задача SGen добавляет переключатель /proxytypes в командную строку sgen.exe.

У Microsoft есть задокументированное свойство MSBuild, которое позволяет отключить переключатель /proxytypes и заставляет задачу SGen генерировать сборки сериализации, даже если в assembly нет типов прокси.

Как следует из документации, вы должны изменить файл проекта вручную, но вы можете добавить свойство SGenUseProxyTypes в свою конфигурацию, чтобы включить генерацию. Конфигурация файлов вашего проекта будет выглядеть примерно так:

Вот как мне удалось это сделать, изменив сценарий MSBUILD в моем файле .CSPROJ:

Во-первых, откройте файл .CSPROJ как файл, а не как проект. Прокрутите вниз файл, пока не найдете этот закомментированный код, непосредственно перед закрытием тега проекта:

Теперь мы просто вставляем нашу собственную цель AfterBuild, чтобы удалить все существующие цели XmlSerializer и SGen, вот так:

Это меня устраивает.

Когда я пытаюсь подписать assembly, я получаю следующую ошибку: Ошибка 1 Assembly генерация не удалась -- ссылка assembly 'comlib' не имеет строгого имени Можно ли подписать assembly, который ссылается на неподписанные сборки, или я должен также подписать сборки COM interop?

XML Serialization из MSDN : Сериализует и десериализует объекты в документы XML и из них. То XmlSerializer позволяет управлять тем, как объекты кодируются в XML. Отражение от MSDN Отражение предоставляет объекты (типа Type), которые инкапсулируют сборки, модули и типы. Отражение можно использовать.

В других ответах на этот вопрос уже упоминался параметр Свойства проекта->Сборка-> Создание сборок сериализации , но по умолчанию он будет генерировать assembly только в том случае, если в проекте есть "Типы прокси-серверов веб-службы XML".

Вы можете проверить результат этой задачи сборки в окне вывода Visual Studio и выбрать команду Построить в раскрывающемся списке Показать вывод из:. Вы должны увидеть что-то вроде

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\sgen.exe /assembly:D:\Temp\LibraryA\obj\Debug\LibraryA.dll / типы прокси /reference. /compiler:/delaysign- LibraryA -> D:\Temp\LibraryA\bin\Debug\LibraryA.dll

Ключевым моментом здесь является переключатель / proxytypes . Вы можете прочитать о различных переключателях для инструмента генератора сериализатора XML (Sgen.exe)

Если вы знакомы с MSBuild, вы можете настроить цель GenerateSerializationAssemblies так, чтобы задача SGen имела атрибут UseProxyTypes="false" вместо true, но затем вам нужно взять на себя всю связанную с этим ответственность за настройку системы Visual Studio / MSBuild. В качестве альтернативы вы можете просто расширить процесс сборки, чтобы вызвать SGen вручную без переключателя /proxytypes.

Если вы прочитаете документацию для SGen, то вам будет совершенно ясно, что Microsoft хотела ограничить использование этого средства. Учитывая количество шума по этой теме, совершенно ясно, что Microsoft не очень хорошо справилась с документированием опыта Visual Studio. Существует даже элемент обратной связи Connect для этой проблемы, и ответ не очень велик.

создание нового определения задачи sgen разбивает муху на колесе. просто установите необходимые переменные, чтобы задача работала так, как задумано. В любом случае в документации Microsoft отсутствует важная информация.

Шаги для предварительного создания сборок сериализации

  1. В Visual Studio 2010 в решении Explorer щелкните правой кнопкой мыши проект, для которого вы хотите создать сборки сериализации, и выберите команду Выгрузить проект.
  2. В решении Explorer щелкните правой кнопкой мыши проект, для которого вы хотите создать сборки сериализации, и выберите команду Изменить .csproj.

В файле .csproj сразу после элемента <TargetFrameworkVersion>v. </TargetFrameworkVersion> добавьте следующие элементы:

В файле .csproj в каждой конфигурации платформы

например <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">

добавьте следующую строку:

Сохраните и закройте файл .csproj.

Эта процедура создает дополнительный assembly с именем .xmlSerializers.dll в выходной папке. Вам нужно будет развернуть этот assembly вместе с вашим решением.

Объяснение

SGen по умолчанию только для типов прокси генерирует для “Any CPU”. Это произойдет, если вы не зададите соответствующие переменные в файле проекта.

SGenPlatformTarget требуется, чтобы соответствовать вашему PlatformTarget. Я склонен думать, что это ошибка в шаблоне проекта. Почему целевая платформа sgen должна отличаться от платформы вашего проекта? Если это произойдет, вы получите исключение во время выполнения

0x80131040: Определение манифеста assembly не соответствует ссылке assembly

Вы можете найти определение задачи msbuild, проанализировав файл проекта:

Посмотрите внутри определения задачи SGen для TargetFrameworkVersion 4.0 из

чтобы увидеть недокументированные переменные, такие как $(SGenPlatformTarget), вы можете установить их в файле проекта

EDIT: То есть, конечно, это исключение происходило и раньше, но когда "enable just my code" выключено, помощник по отладке (если он включен) остановится в этот момент при запуске.

Я немного опоздал на вечеринку, но мне было трудно работать с предыдущим ответом. В частности, Visual Studio зависал всякий раз, когда я пытался просмотреть свойства моего проекта. Я полагаю, что это было связано с тем, что он больше не понимал, как читать файл csproj. Тем не менее.

Добавьте следующее в командную строку события после сборки:

Это позволит использовать sgen.exe непосредственно для перестройки Xml Serialization assembly каждый раз, когда вы создаете свой проект для отладки или выпуска.

Посмотрите в свойствах решения. На вкладке сборка внизу есть выпадающий список под названием "Generate Serialization assembly"

Несколько отличным решением от решения, предоставленного brain backup , может быть прямое указание целевой платформы прямо там, где вы должны ее использовать, например:

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

Почему Visual Studio 2005 не генерирует параметр сериализации, когда я устанавливаю параметр проекта Generate Serialization Assembly на On?

Я пишу сервис WCF, который будет широко использоваться в нашей компании, и я хотел бы создать клиентские прокси WCF как часть процесса сборки и упаковать их в assembly, чтобы клиентам сервиса не.

В чем разница между разбором XML Serialization и XML? Когда мы должны использовать каждый из них?

У меня есть шаблон T4, который обрабатывает несколько файлов .tt в моем проекте. У меня также есть некоторые пользовательские классы, которые я определил, чтобы помочь с процессом преобразования.

Дубликат: это дубликат генерации Xml Serialization assembly как части моей сборки . Пожалуйста, закройте его как дубликат. Как я могу получить Visual Studio создать и внедрить XmlSerializer assembly.

Когда я пытаюсь подписать assembly, я получаю следующую ошибку: Ошибка 1 Assembly генерация не удалась -- ссылка assembly 'comlib' не имеет строгого имени Можно ли подписать assembly, который.

XML Serialization из MSDN : Сериализует и десериализует объекты в документы XML и из них. То XmlSerializer позволяет управлять тем, как объекты кодируются в XML. Отражение от MSDN Отражение.

Я прошу прощения за то, что задаю вопрос, который, вероятно, задавался сотни раз раньше, но я, кажется, не могу найти ответ в архивах; вероятно, потому, что мой вопрос слишком прост. Я знаю, что XML.

У меня есть клиентское приложение winform, которое подключается к локальному сетевому серверу WCF. На стороне клиента возникла проблема с производительностью, и я искал решение и нашел этот пост.

У меня есть методы в моем классе для сериализации/десериализации с использованием другой структуры XML, чем та, которая была бы создана с помощью сериализатора по умолчанию. Методы создают.

Читайте также: