Создать сборку сериализации visual studio
этот код создает исключение 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 отсутствует важная информация.
шаги для предварительного создания сборок сериализации
- в Visual Studio 2010 в обозревателе решений щелкните правой кнопкой мыши проект, для которого вы хотите создайте сборки сериализации и нажмите кнопку выгрузить проект.
- в обозревателе решений щелкните правой кнопкой мыши проект, для которого требуется создать сборки сериализации, и выберите команду Изменить .csproj.
в рамках .csproj файл, сразу после
v. элемент, добавьте следующие элементы:false $(Platform)
в рамках .файл csproj, в каждой платформы конфигурация
добавить следующую строку:
сохранить и закрыть .файл 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 каждый раз, когда вы строите ваш проект для отладки или выпуска.
посмотреть в свойствах на решение. На вкладке сборка в нижней части есть выпадающий список под названием "создать сборку сериализации"
немного отличается от решения, предоставленного резервная копия мозга может быть, чтобы непосредственно указать цель платформы прямо там, где вы должны использовать его так:
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или другие параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Конфигурация и платформа
Следующие параметры используются для выбора конфигурации и платформы с целью просмотра или внесения изменений.
Если выбраны упрощенные конфигурации сборки, система проекта определяет, следует ли выполнять построение отладочной или окончательной версии. Таким образом, эти параметры не отображаются. Дополнительные сведения см. в разделе Практическое руководство. Настройка конфигураций отладки и выпуска.
Конфигурация
Указывает параметры конфигурации для отображения или изменения. Параметрами могут быть Активная (отладка) (используется по умолчанию), Отладка, Выпуск или Все конфигурации.
Платформа
Указывает параметры платформы для отображения или изменения. Значение по умолчанию — Активная (любой ЦП). Можно изменить активную платформу с помощью диспетчера конфигураций. Дополнительные сведения см. в разделе Практическое руководство. Создание и изменение конфигураций.
Общие сведения
Символы условной компиляции
Определить константу DEBUG
Определяет DEBUG в качестве символа во всех файлах исходного кода в приложении. Выбор этого элемента эквивалентен использованию параметра командной строки /define:DEBUG .
Определить константу TRACE
Определяет TRACE в качестве символа во всех файлах исходного кода в приложении. Выбор этого элемента эквивалентен использованию параметра командной строки /define:TRACE .
Целевая платформа
Указывает целевой процессор для выходного файла. Выберите x86 для любого 32-разрядного Intel-совместимого процессора, x64 для любого 64-разрядного Intel-совместимого процессора, ARM для процессоров ARM или Любой ЦП, чтобы указать, что приемлем любой процессор. Любой ЦП является значением по умолчанию для проектов, так как обеспечивает выполнение приложения на самом обширном спектре оборудования.
Допускает значения NULL
Предпочитать 32-разрядную
Если флажок Предпочитать 32-разрядную установлен, приложение выполняется как 32-разрядное в 32- и 64-разрядных версиях Windows. Если флажок снят, приложение выполняется как 32-разрядное в 32-разрядных версиях Windows и как 64-разрядное — в 64-разрядных версиях.
Если приложение запускается как 64-разрядное, размер указателя удваивается, и могут возникнуть проблемы совместимости с другими библиотеками, которые являются исключительно 32-разрядными. Запускать 64-разрядное приложение следует только в том случае, если ему требуется более 4 ГБ памяти либо 64-разрядные инструкции обеспечивают значительное повышение производительности.
Этот флажок доступен, только если верны все следующие условия:
На странице Сборка в списке Целевая платформа установлено значение Любой ЦП.
На странице Приложение в списке Тип вывода указано, что проект является приложением.
Разрешить небезопасный код
Оптимизировать код
Ошибки и предупреждения
Приведенные ниже параметры позволяют настроить ошибки и предупреждения для процесса сборки.
Уровень предупреждений
Отключение предупреждений
Обрабатывать предупреждения как ошибки
Нет — не обрабатывает предупреждения как ошибки.
Все — обрабатывает все предупреждения как ошибки.
Конкретные предупреждения — обрабатывает указанные предупреждения как ошибки. Разделяйте предупреждения запятой или точкой с запятой.
Если вы не хотите, чтобы предупреждения анализа кода обрабатывались как ошибки, см. раздел Вопросы и ответы по анализу кода.
Выходные данные
Приведенные ниже параметры позволяют настроить вывод данных для процесса сборки.
Путь для создаваемых файлов
Местоположение выходных файлов для конфигурации этого проекта. Введите путь к выходной папке сборки в этом поле или нажмите кнопку Обзор, чтобы указать путь. Путь является относительным. Если ввести абсолютный путь, он будет сохранен как относительный. Путь по умолчанию — bin\Debug или bin\Release\.
Если выбраны упрощенные конфигурации сборки, система проекта определяет, следует ли выполнять построение отладочной или окончательной версии. Команда Сборка из меню Отладка (F5) перемещает сборку в расположение отладки вне зависимости от заданного значения Путь для создаваемых файлов. Однако команда Сборка в меню Сборка позволяет поместить сборку в указанное расположение. Дополнительные сведения см. в разделе Общие сведения о конфигурациях построения.
XML-файл документации
Создание сборки сериализации
Указывает, будет ли компилятор использовать инструмент создания XML-сериализатора (Sgen.exe) для создания сборок XML-сериализации. Сборки сериализации могут повысить производительность при запуске XmlSerializer, если вы использовали этот класс для сериализации типов в коде. По умолчанию этот параметр имеет значение Автоматически, которое указывает, что сборки сериализации будут создаваться только в том случае, если вы использовали XmlSerializer для кодирования типов в XML-код. Отключено указывает, что сборки сериализации никогда не создаются, независимо от того, используется ли в вашем коде XmlSerializer. Включено указывает, что сборки сериализации создаются всегда. Сборкам сериализации присваиваются имена TypeName .XmlSerializers.dll. Дополнительные сведения см. в статье Инструмент создания XML-сериализатора (Sgen.exe).
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или другие параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Конфигурация и платформа
Следующие параметры используются для выбора конфигурации и платформы с целью просмотра или внесения изменений.
Если выбраны упрощенные конфигурации сборки, система проекта определяет, следует ли выполнять построение отладочной или окончательной версии. Таким образом, эти параметры не отображаются. Дополнительные сведения см. в разделе Практическое руководство. Настройка конфигураций отладки и выпуска.
Конфигурация
Указывает параметры конфигурации для отображения или изменения. Параметрами могут быть Активная (отладка) (используется по умолчанию), Отладка, Выпуск или Все конфигурации.
Платформа
Указывает параметры платформы для отображения или изменения. Значение по умолчанию — Активная (любой ЦП). Можно изменить активную платформу с помощью диспетчера конфигураций. Дополнительные сведения см. в разделе Практическое руководство. Создание и изменение конфигураций.
Общие сведения
Символы условной компиляции
Определить константу DEBUG
Определяет DEBUG в качестве символа во всех файлах исходного кода в приложении. Выбор этого элемента эквивалентен использованию параметра командной строки /define:DEBUG .
Определить константу TRACE
Определяет TRACE в качестве символа во всех файлах исходного кода в приложении. Выбор этого элемента эквивалентен использованию параметра командной строки /define:TRACE .
Целевая платформа
Указывает целевой процессор для выходного файла. Выберите x86 для любого 32-разрядного Intel-совместимого процессора, x64 для любого 64-разрядного Intel-совместимого процессора, ARM для процессоров ARM или Любой ЦП, чтобы указать, что приемлем любой процессор. Любой ЦП является значением по умолчанию для проектов, так как обеспечивает выполнение приложения на самом обширном спектре оборудования.
Допускает значения NULL
Предпочитать 32-разрядную
Если флажок Предпочитать 32-разрядную установлен, приложение выполняется как 32-разрядное в 32- и 64-разрядных версиях Windows. Если флажок снят, приложение выполняется как 32-разрядное в 32-разрядных версиях Windows и как 64-разрядное — в 64-разрядных версиях.
Если приложение запускается как 64-разрядное, размер указателя удваивается, и могут возникнуть проблемы совместимости с другими библиотеками, которые являются исключительно 32-разрядными. Запускать 64-разрядное приложение следует только в том случае, если ему требуется более 4 ГБ памяти либо 64-разрядные инструкции обеспечивают значительное повышение производительности.
Этот флажок доступен, только если верны все следующие условия:
На странице Сборка в списке Целевая платформа установлено значение Любой ЦП.
На странице Приложение в списке Тип вывода указано, что проект является приложением.
Разрешить небезопасный код
Оптимизировать код
Ошибки и предупреждения
Приведенные ниже параметры позволяют настроить ошибки и предупреждения для процесса сборки.
Уровень предупреждений
Отключение предупреждений
Обрабатывать предупреждения как ошибки
Нет — не обрабатывает предупреждения как ошибки.
Все — обрабатывает все предупреждения как ошибки.
Конкретные предупреждения — обрабатывает указанные предупреждения как ошибки. Разделяйте предупреждения запятой или точкой с запятой.
Если вы не хотите, чтобы предупреждения анализа кода обрабатывались как ошибки, см. раздел Вопросы и ответы по анализу кода.
Выходные данные
Приведенные ниже параметры позволяют настроить вывод данных для процесса сборки.
Путь для создаваемых файлов
Местоположение выходных файлов для конфигурации этого проекта. Введите путь к выходной папке сборки в этом поле или нажмите кнопку Обзор, чтобы указать путь. Путь является относительным. Если ввести абсолютный путь, он будет сохранен как относительный. Путь по умолчанию — bin\Debug или bin\Release\.
Если выбраны упрощенные конфигурации сборки, система проекта определяет, следует ли выполнять построение отладочной или окончательной версии. Команда Сборка из меню Отладка (F5) перемещает сборку в расположение отладки вне зависимости от заданного значения Путь для создаваемых файлов. Однако команда Сборка в меню Сборка позволяет поместить сборку в указанное расположение. Дополнительные сведения см. в разделе Общие сведения о конфигурациях построения.
XML-файл документации
Создание сборки сериализации
Указывает, будет ли компилятор использовать инструмент создания XML-сериализатора (Sgen.exe) для создания сборок XML-сериализации. Сборки сериализации могут повысить производительность при запуске XmlSerializer, если вы использовали этот класс для сериализации типов в коде. По умолчанию этот параметр имеет значение Автоматически, которое указывает, что сборки сериализации будут создаваться только в том случае, если вы использовали XmlSerializer для кодирования типов в XML-код. Отключено указывает, что сборки сериализации никогда не создаются, независимо от того, используется ли в вашем коде XmlSerializer. Включено указывает, что сборки сериализации создаются всегда. Сборкам сериализации присваиваются имена TypeName .XmlSerializers.dll. Дополнительные сведения см. в статье Инструмент создания XML-сериализатора (Sgen.exe).
Этот код создает исключение FileNotFoundException, но в конечном итоге выполняется без проблем:
Первое случайное исключение типа System.IO.FileNotFoundException произошло в mscorlib.dll
Дополнительная информация: не удалось загрузить файл или сборку MyAssembly.XmlSerializers, Version = 1.4.3190.15950, Culture = нейтральный, PublicKeyToken = null или одну из их зависимостей. Система не может найти указанный файл.
Похоже, что фреймворк автоматически генерирует сборку сериализации, если она не найдена. Я могу сгенерировать ее вручную с помощью sgen.exe, что устраняет исключение.
Как заставить Visual Studio автоматически создавать сборку сериализации XML?
Обновление: похоже, что параметр "Создать сборку сериализации: при включении" ничего не делает .
Вот как мне удалось это сделать, изменив сценарий MSBUILD в моем файле .CSPROJ:
Сначала откройте файл .CSPROJ как файл, а не как проект. Прокрутите файл до конца, пока не найдете закомментированный код непосредственно перед закрытием тега Project:
Теперь мы просто вставляем нашу собственную цель AfterBuild, чтобы удалить любой существующий XmlSerializer, а SGen - наш собственный, например:
Это подходит для меня.
Спасибо, отлично поработали. Помогло то, что я поместил классы, которые мне нужно было сериализовать, в отдельный проект, чтобы SGEN просто работал с ними.
Не забудьте включить платформу для SGen, если делаете сборки для конкретной платформы, например: Platform = "$ (Platform)". Я получал ошибку вроде: WRN: сравнение имени сборки привело к несоответствию архитектуры процессора: Ref x86, Def MSIL.
Это прекрасно генерирует файлы DLL, но, похоже, все еще производит генерацию сборки на лету. Нужно ли мне что-то делать с этой DLL после ее создания?
Просто разверните его. Вы можете использовать отладчик, чтобы точно узнать, какой тип вызывает создание динамической сборки. Даже если вы сериализуете все свои типы, они наверняка состоят из других типов, некоторых типов фреймворка, которые могут потребовать создания сборки.
Это происходит в .DLL, где определены классы, или в проекте для .exe? Полагаю, раз уж это MSBuildAllProjects , значит, он правильно помещается в .exe?
Как объяснил Мартин в своем ответе, включения генерации сборки сериализации через свойства проекта недостаточно, потому что задача SGen добавляет переключатель /proxytypes в командную строку sgen.exe.
У Microsoft есть задокументированное свойство MSBuild, которое позволяет отключить /proxytypes и заставляет задачу SGen генерировать сборки сериализации, даже если в сборке нет типов прокси.
Как указано в документации, вы должны изменить файл проекта вручную, но вы можете добавить свойство SGenUseProxyTypes в свою конфигурацию, чтобы включить генерацию. Конфигурация файлов вашего проекта будет выглядеть примерно так:
(+1) Первоначально я начал путь к выбранному ответу, но обнаружил (по крайней мере, в MSBuild 4.0), что сработала только установка свойства $ (SGenUseProxyTypes), исправление одной строки!
Я протестировал и подтвердил, что это работает в Visual Studio 2008. Большое спасибо за то, что откопали это.
Я попробовал это, и он сгенерировал 32-битный XmlSerializers.dll, хотя мой проект настроен для x64. Есть ли параметр "разрядности" для XmlSerializers?
В других ответах на этот вопрос уже упоминался параметр Project Properties-> Build-> Generate Serialization Assemblies , но по умолчанию он будет генерировать сборку только в том случае, если есть « типы прокси веб-службы XML "в проекте.
Вы можете проверить результат этой задачи сборки в окне Вывод Visual Studio и выбрать Сборка в раскрывающемся списке Показать вывод из : Вы должны увидеть что-то вроде
C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ bin \ sgen.exe /assembly:D:\Temp\LibraryA\obj\Debug\LibraryA.dll / proxytypes / reference : .. / компилятор: / delaysign- LibraryA -> D: \ Temp \ LibraryA \ bin \ Debug \ LibraryA.dll
Ключевым моментом здесь является переключатель / proxytypes . Вы можете прочитать о различных переключателях для XML Serializer Generator Tool ( Sgen.exe)
Если вы знакомы с MSBuild, вы можете настроить цель GenerateSerializationAssemblies так, чтобы задача SGen имела атрибут UseProxyTypes = "false" вместо true, но тогда вам необходимо взять на себя всю связанную с этим ответственность по настройке системы Visual Studio / MSBuild. В качестве альтернативы вы можете просто расширить процесс сборки, чтобы вызвать SGen вручную без переключателя / proxytypes.
Если вы читаете документацию по SGen, они довольно ясно понимают, что Microsoft хотела ограничить использование этой возможности. Учитывая количество шума по этой теме, довольно ясно, что Microsoft не очень хорошо справилась с документированием опыта Visual Studio. Есть даже пункт Connect Feedback для этой проблемы и ответа не здорово.
РЕДАКТИРОВАТЬ: Это, конечно, означает, что это исключение происходило раньше, но когда параметр «Включить только мой код» отключен, помощник по отладке (если он включен) остановится на этом этапе при вызове.
Я немного опоздал на вечеринку, но мне было трудно работать с предыдущим ответом. В частности, Visual Studio вылетала всякий раз, когда я пытался просмотреть свойства своего проекта. Я полагаю, это было связано с тем, что он больше не понимал, как читать файл csproj. Тем не менее .
Добавьте в командную строку события после сборки следующее:
Это будет использовать sgen.exe напрямую для перестройки сборки сериализации 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 отсутствует важная информация.
шаги для предварительного создания сборок сериализации
- в Visual Studio 2010 в обозревателе решений щелкните правой кнопкой мыши проект, для которого вы хотите создайте сборки сериализации и нажмите кнопку выгрузить проект.
- в обозревателе решений щелкните правой кнопкой мыши проект, для которого требуется создать сборки сериализации, и нажмите кнопку Изменить .csproj файл.
в рамках .файл csproj, сразу после
в рамках .файл csproj, в каждой платформы конфигурация
добавить следующую строку:
сохранить и закрыть .файл 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 при каждом создании ваш проект для отладки или выпуска.
посмотрите в свойствах решения. На вкладке "сборка" внизу есть раскрывающийся список "создать сборку сериализации"
немного отличается от решения, предоставленного резервная копия мозга может быть, чтобы напрямую указать целевую платформу, где вы должны использовать ее так:
Читайте также: