MSBuild не может найти SGen при компиляции решения - PullRequest
7 голосов
/ 08 апреля 2010

Я посмотрел здесь несколько других связанных с 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?

Ответы [ 4 ]

17 голосов
/ 08 апреля 2010

Кажется, это обычная проблема, с которой я сам столкнулся в эти дни.

В свойствах вашего проекта на вкладке «Сборка» установите параметр « Создать сериализацию сборки » из «Авто» в « Выкл. ».


обновление

Если вы еще не пробовали, убедитесь, что для настройки выпуска и отладки установлено значение <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>.

0 голосов
/ 22 июня 2017

В свойствах вашего проекта на вкладке «Сборка» установите параметр «Создать сборку сериализации» с «Авто» на «Выкл.».

Это решило мою проблему.

0 голосов
/ 26 января 2016

Я думаю, что есть решение без боли установки старых версий VS

Пожалуйста, попробуйте следующее:

Key: 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
0 голосов
/ 08 апреля 2010

Я не уверен, что или почему это происходило, но чтобы обойти это, я установил Visual Studio 2005. Я уже установил .NET 2.0 SDK и .NET 3.5 SDK, но не повезло что-то с установщиком Visual Studio 2005 решило эту проблему для меня. Это ужасное решение, но, тем не менее, это решение.

Надеемся, что в скором времени мы сможем перейти на .NET 4.0 и полностью избавиться от .NET 2.0 и его проблем.

...