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\.NETFramework
sdkInstallRootv2.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?
Para aclarar, he instalado los 3.5 y 2.0 SDK y ninguno de ellos cambió el comportamiento para esto. – Jaxidian
¿Ya intentó MSBuild su solución directamente (sin ser llamado por NAnt)? – Filburt
Sí, el mismo problema. – Jaxidian