Ich habe mehrere andere SGen-bezogene Fragen hier angeschaut und entweder ihre Antworten nicht oder ihre Antworten beheben das nicht für mich. Ich habe mehrere SDKs installiert, um dieses Problem ohne Erfolg zu beheben. Referenztypen sollten nicht geändert werden, da dies der einzige Ort ist, an dem dies ein Problem ist. Sobald Vorschlag ist, SGen.exe in den Ordner C:\Windows\Microsoft.NET\Framework\v3.5
, aber das ist nicht auf der Box, wo dies kein Problem ist getan. In diesem Szenario existiert SGen.exe
tatsächlich und ist genau dort, wo es sein soll, aber MSBuild hat immer noch Probleme mit der Suche aus irgendeinem Grund!MSBuild kann SGen beim Kompilieren einer Lösung nicht finden
Hintergrund:
Wir haben ein NAnt Skript, das unsere baut automatisiert. In diesem Szenario ruft NAnt MSBuild auf, und MSBuild generiert den Fehler, der angibt, dass SGen nicht gefunden werden kann. Das Projekt ist .NET 3.5-basiert. Ich habe meine primäre Entwicklungsumgebung (64-Bit Vista Ultimate), wo das Skript perfekt funktioniert, und ich versuche, es in einer VM zu duplizieren (64-Bit Win 7 Ultimate). Ich denke, ich habe alles zu dem Punkt, wo ich gut sein sollte, aber das scheitert an der Win7-Box (funktioniert perfekt auf der Vista-Box).
Ich habe einige Vergleiche zwischen den beiden Boxen gemacht und sie beide aussehen identisch in dieser Hinsicht, aber es schlägt immer noch fehl. Beispiel: Der Wert HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
sdkInstallRootv2.0
ist auf beiden Computern auf C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\
festgelegt. In beiden Maschinen ist SGen.exe
in diesem Pfad bin
Unterverzeichnis.
NAnt Skript:
<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>
Die Fehlermeldung erhalte ich, ist dies:
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)
Was mache ich hier falsch zu tun, dass MSBuild STILL verursacht werden nicht in der Lage SGen zu finden?
Zur Klarstellung, ich habe die 3.5 und 2.0 SDKs installiert und keiner von ihnen änderte das Verhalten dafür. – Jaxidian
Haben Sie bereits versucht, Ihre Lösung direkt zu erstellen (ohne von NAnt angerufen zu werden)? – Filburt
Yup, das gleiche Problem. – Jaxidian