Я посмотрел здесь несколько других связанных с SGen вопросов, и либо их ответы не применяются, либо их ответы не исправляют это для меня. Я установил несколько SDK, чтобы решить эту проблему без удачи. Типы ссылок не должны быть изменены, так как это единственное место, где возникает проблема. Один раз предлагается поместить SGen.exe в папку C:\Windows\Microsoft.NET\Framework\v3.5
, но это не было сделано на коробке, где это не проблема. В этом сценарии SGen.exe
действительно существует и находится там, где он должен быть, но у MSBuild по-прежнему возникают проблемы с его поиском!
Справочная информация:
У нас есть скрипт NAnt, который автоматизирует наши сборки. В этом сценарии NAnt вызывает MSBuild, а MSBuild генерирует ошибку, утверждая, что не может найти SGen. Проект основан на .NET 3.5. У меня есть моя основная среда разработки (64-битная Vista Ultimate), где скрипт отлично работает, и я пытаюсь скопировать его на виртуальную машину (64-битная Win 7 Ultimate). Я думаю, у меня есть все до такой степени, что я должен быть готов к работе, но это не работает на коробке Win7 (отлично работает на коробке Vista).
Я провел несколько сравнений между этими двумя блоками, и они оба выглядят идентичными в этом отношении, но все равно не получается. Например, значение HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
sdkInstallRootv2.0
установлено на C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\
на обеих машинах. На обеих машинах SGen.exe
находится в подкаталоге bin
этого пути.
NAnt Сценарий:
<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>
Я получаю сообщение об ошибке:
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)
Что я здесь делаю неправильно, из-за чего MSBuild все еще не может найти SGen?