Ошибка Microsoft.Build.Engine (цели по умолчанию): Target GetFrameworkPaths: Не удалось найти .NET Framework SDK - PullRequest
1 голос
/ 17 марта 2010

Я пишу веб-сервис, который при вызове должен создать проект C #. Я использую ссылку Framework 2, Microsoft.Buld.Engine и Microsoft.Build.Framework. Если вы посмотрите в файле .csproj раздела '', по умолчанию он имеет:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

который я затем изменил на:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Мой код для сборки csproj:

Engine buildEngine = new Engine(Path.Combine(Environment.GetEnvironmentVariable("SystemRoot"), @"Microsoft.NET\Framework\v2.0.50727"));
FileLogger logger = new FileLogger();
logger.Parameters = @"logfile=c:\temp\build.log";
buildEngine.RegisterLogger(logger);

bool success = buildEngine.BuildProjectFile([Path_Of_Directory]+ "ProjectName.csproj");
buildEngine.UnregisterAllLoggers();

Переменная успеха возвращает false, потому что сборка не удалась. Затем я проверяю файл build.log и получаю сообщение об ошибке:

Сборка началась 17.03.2010 11:16:56 проект "[Path_Of_Directory] \ ProjectName.csproj" (цели по умолчанию): Цель GetFrameworkPaths: не удалось найти .NET Framework SDK. Задача ищу путь к .NET Каркас SDK на месте указано в SDKInstallRootv2.0 значение ключа реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework. Вы можете быть в состоянии решить проблему выполнив одно из следующих действий: 1.) Установите .NET Framework SDK. 2.) Вручную установите указанный выше ключ реестра правильное местоположение. Target

Я не могу понять, почему он не будет строить. Любая помощь будет высоко ценится. Спасибо

Ответы [ 4 ]

4 голосов
/ 29 ноября 2010

Use /ToolsVersion:3.5

Согласно http://blogs.msdn.com/b/msbuild/archive/2006/11/15/multi-targeting-how-does-it-work.aspx

ToolsVersion - это параметр, который используется для принудительного создания проекта с использованием определенного набора инструментов.

1 голос
/ 26 декабря 2011

вы можете попробовать вот так:

Найдите сборку из C: \ Program Files \ Справочные сборки \ Microsoft \ Framework \ v3.5 \ Microsoft.Build.Engine.dll. копия а также Прошлое в GAC Местоположение, как указано ниже:

C: \ Windows \ сборка \ GAC_MSIL \ Microsoft.Build.Engine \ 3.5.0.0__b03f5f7f11d50a3a

это работает. проблема из-за отсутствия файла GAC.

1 голос
/ 18 марта 2010

При дальнейшем расследовании я нашел истинную причину ошибки.Напомним, что я создаю приложение:

Это веб-сервис, созданный в рамках 3.5, пытающийся создать проект C #, разработанный с использованием инфраструктуры 2.

Когда добавляются две ссылки, Microsoft.Buld.Engine и Microsoft.Build.Framework, вы заметите, что есть две версии каждой. Одна версия является версией framework 2, а другая - версией framwork 3.5.Поскольку проект, который я пытался построить, выполнен в framework 2, я импортировал версию framework 2.В этом и заключается ошибка.

Решение: BinPath должен быть единственной ссылкой на структуру два, а именно: "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727".Microsoft.Buld.Engine и Microsoft.Build.Framework должны указывать на версию 3.5, поскольку приложение, создающее здание, разработано в фреймворке 3.5.Я полагаю, если бы он был разработан в рамках 2, у меня никогда не было бы проблемы во-первых.

1 голос
/ 17 марта 2010

Вы можете попробовать проверить путь SDK, построив этот проект:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="GetPath">
        <GetFrameworkSdkPath>
            <Output
                TaskParameter="Path"
                PropertyName="SdkPath" />
        </GetFrameworkSdkPath>
        <Message Text="$(SdkPath)"/>
    </Target>
</Project>

Я могу ошибаться, но путь C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 , который вы видите, кажется неправильным.

Это скорее C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ или C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A.

...