2010-04-08 10 views
6

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\.NETFrameworksdkInstallRootv2.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?

+0

Zur Klarstellung, ich habe die 3.5 und 2.0 SDKs installiert und keiner von ihnen änderte das Verhalten dafür. – Jaxidian

+0

Haben Sie bereits versucht, Ihre Lösung direkt zu erstellen (ohne von NAnt angerufen zu werden)? – Filburt

+0

Yup, das gleiche Problem. – Jaxidian

Antwort

-2

Ich bin mir nicht sicher, was oder warum das passierte, aber was ich getan habe, war Visual Studio 2005 zu installieren. Ich hatte das .NET 2.0 SDK und das .NET 3.5 SDK bereits ohne Glück installiert aber etwas mit dem Visual Studio 2005-Installationsprogramm hat dieses Problem für mich gelöst. Dies ist eine schreckliche Lösung, aber es war dennoch eine Lösung.

Hoffentlich können wir bald zu .NET 4.0 migrieren und .NET 2.0 und seine Probleme loswerden.

16

Dies scheint ein häufiges Problem zu sein, auf das ich gerade selbst in diesen Tagen lief.

In den Projekteigenschaften auf dem "Build" Registerkarte die Option "Serialisierungsassembly generieren" von "Auto" auf "Off".


Update

Wenn Sie nicht bereits versucht, stellen Sie sicher, dass <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies> für Release und Debug-Konfiguration festgelegt ist.

+0

Ich habe das versucht und es gab keine Veränderung im Verhalten. Dieser Teil meines Build-Skripts ist eine Einzelprojekt-Lösung, und ich habe mir diese '.csproj'-Datei angeschaut und sie enthält ' Off', als ich diese Einstellung änderte, aber ich bekomme genau den gleichen Fehler. – Jaxidian

+0

Um auf Ihr Update zu antworten: Ich hatte darüber nachgedacht und das war kein Problem. – Jaxidian

+1

Danke Filburt, das funktioniert für mich, nicht sicher, was ich tun würde, wenn ich SerializationAssemblies brauchen würde. : -] – Myster

0

Ich denke, es gibt eine Lösung, ohne den Schmerz der Installation von alten Versionen von VS

Bitte versuchen Sie folgendes:

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

String Wert: Name: Installation Wert (Standard): C: \ Program Files (x86) \ Microsoft.NET \ SDK \ v2.0 \

oder diesem Code als REG-Datei speichern und ausführen:

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

In Ihrer Projekteigenschaft auf dem Registerkarte „Build“ die Option „Serialisierungsassembly erzeugt“ von „Auto“ auf „aus“.

Es hat mein Problem gelöst.