SGEN: Se intentó cargar un ensamblado con un formato incorrecto


Tengo un proyecto que puede construirse bien en mi máquina local, sin embargo, cuando obtengo TFS para construirlo, recibo el siguiente error:

SGEN: Se intentó cargar un ensamblado con un formato incorrecto:

Después de leer muchas otras publicaciones aquí sobre este tema, la mayoría de la gente simplemente dice que necesito cambiar el tipo de compilación a x86 o Cualquier CPU, en lugar de x64, pero después de probar innumerables combinaciones, esta no fue la solución. Mi programa también es un servicio de Windows, así que configurar el grupo de aplicaciones para permitir aplicaciones de 32 bits (como sugirieron otros) tampoco es la solución.

Author: Paul McLean, 2012-11-14

8 answers

Mi problema fue finalmente resuelto por esta páginahttp://aplocher.wordpress.com/2012/10/12/sgen-an-attempt-was-made-to-load-an-assembly-with-an-incorrect-format-tfs-2010/

En caso de que esa página desaparezca en el futuro, estos son los pasos involucrados -

  1. En Team Explorer, haga clic derecho en su Definición de compilación y elija Abrir la ubicación del archivo de proceso
  2. Haga doble clic en el archivo XAML que está seleccionado
  3. En el diseñador, seleccione el contenedor llamada Secuencia (este es el contenedor de nivel superior que va alrededor de todo lo demás).
  4. En la lista de argumentos (normalmente en la parte inferior), cambie MSBuildPlatform de Microsoft.TeamFoundation.Construir.Flujo.Actividad.Plataforma de herramientas.Auto a Microsoft.TeamFoundation.Construir.Flujo.Actividad.Plataforma de herramientas.X86.
  5. Guarde y cierre el archivo.
  6. Compruebe el archivo de nuevo en TFS e intente su compilación de nuevo.
 15
Author: Paul McLean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-22 18:27:53

El problema desaparece después de instalar el último SDK de Windows que incluye la versión de 64 bits de sgen.exe:

Http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

A veces (si eso no ayuda) la versión anterior ayuda:

Http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

Por alguna razón, la versión de 64 bits de sgen no está incluida en Microsoft Build Tools

 8
Author: Louis Somers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-18 15:07:22

Me encontré con el mismo error cuando intenté compilar mi proyecto (Platform target está establecido en x86) en Release. Compiló bien en Debug. Llegué a descubrir que en Release, se ejecuta Generate serialization assembly; por lo tanto, la llamada a la utilidad SGen. El problema fue que MSBuild llamó a la versión x64 de SGen contra mi x86 EXE, lo que generó el error. Tuve que pasar este argumento de MSBuild para que MSBuild use la versión correcta de SGen:

/p:SGenToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools"
 5
Author: TDN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 16:23:47

Encontré este asunto relevante: https://github.com/dotnet/sdk/issues/1630

Mientras esperaba que esto se arreglara en una versión futura, pude resolver el problema agregando dos destinos al archivo csproj, como sugirió https://github.com/joperezr :

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
    <ItemGroup>
    <ReferencePath Remove="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." />
</Target>

<Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
    <ItemGroup>
    <ReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has run." />
</Target>
 5
Author: Ola Eldøy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 10:20:25

En mi caso, este error no se debió a una combinación no válida de configuraciones x86 / x64, sino a intentar compilar un proyecto dirigido a una versión específica de.NET framework (v4.5.1) cuyos ensamblados de referencia no se habían instalado en el servidor de compilación.

La combinación de las dos condiciones siguientes fue responsable del error:

  1. En Visual Studio, en la página de Propiedades del proyecto, en la pestaña Aplicación, el "Target framework" se estableció en". NET Framework 4.5.1";
  2. En el servidor de compilación, en la carpeta C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework, una carpeta llamada v4.5.1 estaba no presente. (Otras carpetas con números de versión, incluyendo v3.5, v4.0, y v4.5, estaban presentes.)

La solución fue instalar Windows Software Development Kit (SDK) para Windows 8.1 en el servidor de compilación. En el asistente de instalación, en el paso" Seleccione las características que desea instalar", desmarcé todas las casillas excepto la de". NET framework 4.5.1 Desarrollo de software Kit".

La ejecución de esa instalación causó la falta de la carpeta v4.5.1 en los Ensamblados de referencia\Microsoft\Framework.NetFramework carpeta que se creará, y la compilación para ejecutar con éxito.

 2
Author: Jon Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-29 16:02:06

Tuve este mismo problema y ver la pantalla de salida me dio más detalles. A partir de eso, descubrí que el marco de trabajo objetivo era más alto de lo permitido para este tipo de proyecto (estaba construyendo un proyecto CLR de SQL Server). El marco objetivo del proyecto se fijó en 4.0. Cambiar esto de nuevo a 3.5 solucionó el problema para mí.

Dave

 0
Author: David Wiltcher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 17:21:37

Actualizé un proyecto de 4.0 a 4.5.2 e instalé el Microsoft.NET Framework 4.5.2 Developer Pack en el servidor de compilación. Después de eso funcionó. Tienes developer pack para todas las otras versiones de. net.

Https://support.microsoft.com/en-us/help/2901951/the-microsoft--net-framework-4-5-2-developer-pack-for-windows-server-2

 0
Author: fedda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-22 14:28:58

Estaba teniendo un problema similar, viendo el error de "formato incorrecto" de SGEN al compilar en VS o MSBuild desde la línea de comandos. Mi proyecto es x64, pero MSBuild insistió en usar la versión de 32 bits de la herramienta. (Algunos de mis compañeros trabajan alrededor de esto construyendo en VS 2015, pero solo tengo VS 2017 instalado y quiero mantenerlo de esa manera.)

Mirando la salida de la compilación de diagnóstico, parece que SGEN se está ejecutando desde el directorio nombrado por su parámetro SdkToolsPath (para mí: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\). Esto es asignado desde TargetFrameworkSDKToolsDirectory. Mirando los archivos de destino, esto viene de SDK40ToolsPath. Y eso se establece desde MSBuild .archivo de configuración.

Resolví esto editando C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe.config (requiere privilegio de administrador), estableciendo la propiedad SDK40ToolsPath usando

<property name="SDK40ToolsPath" value="$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools-x64', 'InstallationFolder', null, RegistryView.Registry32))" />

(Nota: Si está buscando esta ruta en el registro en un sistema operativo de 64 bits, vaya a HKLM\SOFTWARE\Wow6432Node\Microsoft...)

El cambio principal es, por supuesto, x86 a x64 para usar las herramientas de 64 bits. Yo también cambié el marco debe ser lo que utilizamos (4.6.2). Esto puede significar que solo podemos usar herramientas de manera confiable para proyectos de 64 bits y para este marco, con este cambio en su lugar. Aún así, espero que esto pueda ayudar a alguien a encontrarse con este problema. (Estoy sorprendido y consternado MSBuild no cambia automáticamente la ruta de las herramientas basada en el Marco y la Arquitectura.)

 0
Author: Keith Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 21:14:24