2010-04-08 17 views
6

He consultado otras preguntas relacionadas con SGen aquí y sus respuestas no se aplican o sus respuestas no me solucionan esto. He instalado varios SDK para solucionar este problema sin suerte. Los tipos de referencia no se deben cambiar, ya que este es el único lugar donde esto es un problema. Una vez que la sugerencia es poner SGen.exe en la carpeta C:\Windows\Microsoft.NET\Framework\v3.5, pero eso no se ha hecho en el cuadro donde esto no es un problema. En este escenario, SGen.exe existe y está justo donde se supone que debe estar, ¡pero MSBuild aún tiene problemas para encontrarlo por alguna razón!MSBuild no puede encontrar SGen al compilar una solución

Antecedentes:

Tenemos un script que automatiza de NAnt nuestra construye. En este escenario, NAnt llama a MSBuild y MSBuild genera el error que afirma no poder encontrar SGen. El proyecto está basado en .NET 3.5. Tengo mi entorno de desarrollo primario (Vista Ultimate de 64 bits) donde el script funciona perfectamente y estoy intentando duplicarlo en una VM (Windows 7 Ultimate de 64 bits). CREO que tengo todo al punto en el que debería ser bueno pero esto falla en la caja de Win7 (funciona perfectamente en la caja de Vista).

He hecho algunas comparaciones entre las dos cajas y ambas parecen idénticas a este respecto, pero aún así falla. Por ejemplo, el valor de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrameworksdkInstallRootv2.0 se establece en C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\ en ambas máquinas. En ambas máquinas, SGen.exe se encuentra en el subdirectorio bin de esa ruta.

de NAnt Guión:

mensaje
<target name="report-installer" depends="fail-if-environment-not-set"> 
    <exec program="MSBuild.exe" basedir="${framework35.directory}"> 
     <arg value="${tools.directory.current}\ReportInstaller\ReportInstaller.sln" /> 
     <arg value="/p:Configuration=${buildconfiguration.current}" /> 
    </exec> 
</target> 

El error que consigo es la siguiente:

report-installer: 

    [exec] Microsoft (R) Build Engine Version 3.5.30729.4926 
    [exec] [Microsoft .NET Framework, Version 2.0.50727.4927] 
    [exec] Copyright (C) Microsoft Corporation 2007. All rights reserved. 
    [exec] 
    [exec] Build started 4/8/2010 11:28:23 AM. 
    [exec] Project "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.sln" on node 0 (default targets). 
    [exec] Building solution configuration "Release|Any CPU". 
    [exec] Project "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.sln" (1) is building "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.csproj" (2) on node 0 (default targets). 
    [exec] Could not locate the .NET Framework SDK. The task is looking for the path to the .NET Framework SDK at the location specified in the SDKInstallRootv2.0 value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework. You may be able to solve the problem by doing one of the following: 1.) Install the .NET Framework SDK. 2.) Manually set the above registry key to the correct location. 
    [exec] CoreCompile: 
    [exec] Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files. 
    [exec] C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): error MSB3091: Task failed because "sgen.exe" was not found, or the .NET Framework SDK v2.0 is not installed. The task is looking for "sgen.exe" in the "bin" subdirectory beneath the location specified in the SDKInstallRootv2.0 value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework. You may be able to solve the problem by doing one of the following: 1.) Install the .NET Framework SDK v2.0. 2.) Manually set the above registry key to the correct location. 3.) Pass the correct location into the "ToolPath" parameter of the task. 
    [exec] Done Building Project "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.csproj" (default targets) -- FAILED. 
    [exec] Done Building Project "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.sln" (default targets) -- FAILED. 
    [exec] 
    [exec] Build FAILED. 
    [exec] 
    [exec] "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.sln" (default target) (1) -> 
    [exec] "C:\Projects\Production\Tools\ReportInstaller\ReportInstaller.csproj" (default target) (2) -> 
    [exec] (GenerateSerializationAssemblies target) -> 
    [exec] C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): error MSB3091: Task failed because "sgen.exe" was not found, or the .NET Framework SDK v2.0 is not installed. The task is looking for "sgen.exe" in the "bin" subdirectory beneath the location specified in the SDKInstallRootv2.0 value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework. You may be able to solve the problem by doing one of the following: 1.) Install the .NET Framework SDK v2.0. 2.) Manually set the above registry key to the correct location. 3.) Pass the correct location into the "ToolPath" parameter of the task. 
    [exec] 
    [exec]  0 Warning(s) 
    [exec]  1 Error(s) 
    [exec] 
    [exec] Time Elapsed 00:00:00.24 
    [call] C:\Projects\Production\Source\reports.build(15,4): 
    [call] External Program Failed: C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe (return code was 1) 

¿Qué estoy haciendo mal aquí que está causando MSBuild ser todavía incapaz de encontrar Sgen?

+0

Para aclarar, he instalado los 3.5 y 2.0 SDK y ninguno de ellos cambió el comportamiento para esto. – Jaxidian

+0

¿Ya intentó MSBuild su solución directamente (sin ser llamado por NAnt)? – Filburt

+0

Sí, el mismo problema. – Jaxidian

Respuesta

-2

No estoy seguro de qué o por qué estaba sucediendo esto, pero lo que hice para evitar esto fue instalar Visual Studio 2005. Ya había instalado el .NET 2.0 SDK y el .NET 3.5 SDK sin suerte pero algo con el instalador de Visual Studio 2005 resolvió este problema para mí. Esta es una solución HORRIBLE, pero fue, sin embargo, una solución.

Esperemos que podamos migrar a .NET 4.0 pronto y completar completamente .NET 2.0 y sus problemas.

16

Esto parece ser un problema común que acabo de encontrar en estos días.

En las propiedades del proyecto en la pestaña "Build" establezca la opción "Generar ensamblado de serialización" de "Auto" a "Off ".


actualización

Si no lo ha intentado, asegúrese de que <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies> está ajustado para la configuración de la versión y de depuración.

+0

Intenté esto y no hubo ningún cambio en el comportamiento. Esta parte de mi script de compilación es una solución de proyecto único y busqué en ese archivo '.csproj' y contiene' Off 'desde que cambié esa configuración, pero obtengo exactamente el mismo error. – Jaxidian

+0

Para responder a su actualización: había pensado en eso y eso no era un problema. – Jaxidian

+1

Gracias Filburt, eso funciona para mí, no estoy seguro de lo que haría si tuviera SerializationAssemblies. : -] – Myster

0

Creo que hay una solución sin la molestia de instalar versiones antiguas de VS

intenta lo siguiente:

clave: HK EY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v2.0 \

Valor de cadena: Nombre: InstallationFolder Valor (predeterminado): C: \ Archivos de programa (x86) \ Microsoft.NET \ SDK \ v2.0 \

o guardar este archivo como código .reg y ejecutar:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0] 
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft.NET\\SDK\\v2.0 
0

en las propiedades del proyecto en la pestaña "Build" establezca la opción "Generar ensamblado de serialización" de "Auto" a "No".

Resolvió mi problema.

Cuestiones relacionadas