Para que é gerado o MyAssembly.XmlSerializers.dll?


124

Estou trabalhando em um projeto que gera uma montagem. Acabei de perceber que um assembly adicional * .XmlSerializers.dll está sendo gerado. Por que esse arquivo é gerado automaticamente e para que é usado?


Eu acho que você já sabe por que é gerado. caso contrário, é gerado porque seu projeto está expondo um tipo de serviço da web. sempre é gerado durante o tempo de compilação ou durante o tempo de execução. em tempo de execução, ele é gerado na pasta Temp com um nome aleatório
AaA

Respostas:


101

Na implementação do .NET , o XmlSerializer gera um assembly temporário para serializar / desserializar suas classes (por motivos de desempenho). Ele pode ser gerado rapidamente (mas leva tempo em cada execução) ou pode ser gerado durante a compilação e salvo nesta montagem que você está perguntando.

Você pode alterar esse comportamento nas opções do projeto (guia Compilar -> Opções avançadas de compilação -> Gerar montagens de serialização , Automático ou Ativado , respectivamente). O elemento correspondente no arquivo do projeto é GenerateSerializationAssemblies , por exemplo <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>,.


21
Se for gerado quando a configuração do projeto for Automática, isso significa que é necessário? o que acontece se você não implantar o X.XMLSerializers.dll com o aplicativo, ele será gerado rapidamente?
Rory

3
Então, como alguém faz o pré-carregamento desses conjuntos?
Carlo

1
@Rory, eu sei que esta pergunta é antiga, mas esse parece ser o caso. Três dos meus projetos foram definidos como Auto, mas apenas um criou uma DLL de serialização.
Ps2goat

4
**Generate Serialization Assemblies** Specifies whether the compiler will use the XML Serializer Generator Tool (Sgen.exe) to create XML serialization assemblies. Serialization assemblies can improve the startup performance of XmlSerializer if you have used that class to serialize types in your code. By default, this option is set to Auto, which specifies that serialization assemblies be generated only if you have used XmlSerializer to encode types in your code to XML. msdn.microsoft.com/pt-BR/library/kb4wyys2.aspx
ps2goat 18/06/2015

2
Alteração manual do VS2015: clique com o botão direito do mouse no nome do projeto -> Propriedades -> Construir -> (Role para baixo) Gerar montagem de serialização.
Eido95

54

PARA SUA INFORMAÇÃO. As etapas exatas para impedir que o XmlSerializers.dll sejam geradas automaticamente são:

  1. No VS, clique com o botão direito do mouse no arquivo do projeto e selecione "Propriedades"
  2. Clique na guia "Build"
  3. Altere o menu suspenso "Gerar conjunto de serialização" de "Automático" para "Desativado"
  4. Reconstruir e ele se foi

17
Sim, mas a questão era por que é gerada!
Hemant

Eu sei que essa é uma resposta antiga, mas na atualização 3 do VS2015 em um aplicativo Winforms direcionado ao .NET 2.0 x86 quando compilado em um sistema Win10 Ent de 64 bits, mesmo quando a configuração "Gerar conjunto de serialização" suspensa para "Desativado" e os * .XmlSerializers. DLL ainda é gerado. Meu aplicativo faz referência a um serviço web ASMX. Talvez um bug na atualização 3 do VS2015?
Peter Peter

6

Acho que essa é a compilação JIT (Just in time) de serialisers XML por razões de desempenho.

Você obtém o mesmo com instâncias RegEx usando a opção RegexOptions.Compiled ativada.

Não sou especialista em .NET CLR, desculpe pela falta de detalhes técnicos precisos.


5

*.XmlSerializers.dll são gerados usando o Sgen.exe [XML Serializer Generator Tool]

Consulte Sgen.exe no MSDN

Normalmente, Sgen.exeé usado nos eventos Pós-Construção de Projetos. Veja se o seu projeto possui um evento pós-construção que gera o*.XmlSerializers.dll


4

O projeto gera apenas o project.XMLSerialisers.dll para aplicativos da Web. Para outros aplicativos, você deve executar o sgen separadamente.


1
Meu aplicativo WinForms gera o MyProject.XMLSerializers.dll quando a configuração é
ativada
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.