MSBuild не может найти SGen при компиляции решения
Я посмотрел здесь несколько других связанных с 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
"s 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?
4 ответа
Кажется, это общая проблема, с которой я сам столкнулся в эти дни.
В свойствах вашего проекта на вкладке "Сборка" установите параметр "Создать сборку сериализации" с "Авто" на "Выкл.".
Обновить
Если вы еще не пробовали, убедитесь, что <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
установлен для конфигурации выпуска и отладки.
В свойствах вашего проекта на вкладке "Сборка" установите параметр "Создать сборку сериализации" с "Авто" на "Выкл.".
Это решило мою проблему.
Я думаю, что есть решение без боли установки старых версий VS
Пожалуйста, попробуйте следующее:
- скачать + установить.NET Framework 2.0 Software Development Kit (SDK) (x86): https://www.microsoft.com/en-us/download/details.aspx?id=19988
- убедитесь, что существует следующий RegKey:
Ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v2.0\
Строковое значение: Имя: InstallationFolder Значение (по умолчанию): C:\Program Files (x86)\Microsoft.NET\SDK\v2.0\
или сохраните этот код как файл.reg и выполните:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0]
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft.NET\\SDK\\v2.0
Я не уверен, что или почему это происходило, но я попытался обойти это, установив Visual Studio 2005. Я уже установил SDK для.NET 2.0, а также SDK для.NET 3.5, но без удачи, но кое-что с Установщик Visual Studio 2005 решил эту проблему для меня. Это УЖАСНОЕ решение, но, тем не менее, это было решение.
Надеемся, что в скором времени мы сможем перейти на.NET 4.0 и полностью избавиться от.NET 2.0 и его проблем.