Microsoft.Build.Engine错误(默认目标):目标GetFrameworkPaths:找不到.NET Framework SDK

时间:2010-03-17 09:21:05

标签: c# .net msbuild msbuild-buildengine

我正在编写一个Web服务,调用时应该构建一个C#项目。我正在使用框架2参考,Microsoft.Buld.Engine和Microsoft.Build.Framework。如果您查看'< Import>'部分.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文件,这是我收到的错误:

  

Build build 3/17/2010 11:16:56 AM   项目   “[Path_Of_Directory] ​​\ ProjectName.csproj”   (默认目标):目标   GetFrameworkPaths:找不到   .NET Framework SDK。任务是   寻找.NET的路径   该位置的Framework SDK   在SDKInstallRootv2.0中指定   注册表项的值   HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework。   您或许可以解决问题   通过执行以下操作之一:1。)   安装.NET Framework SDK。 2.)   手动将上面的注册表项设置为   正确的位置。目标

我无法理解它为什么不会建造。任何帮助都感激不尽。感谢

4 个答案:

答案 0 :(得分:4)

使用/ToolsVersion:3.5

根据http://blogs.msdn.com/b/msbuild/archive/2006/11/15/multi-targeting-how-does-it-work.aspx

  

ToolsVersion是用于强制使用特定工具集构建项目的参数。

答案 1 :(得分:1)

您可以尝试通过构建此项目来验证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 SDKs \ Windows \ v6.0A。

答案 2 :(得分:1)

在进一步调查中,我找到了错误的真正原因。回顾一下我正在创建的应用程序:

这是在框架3.5中创建的Web服务,试图构建使用框架2开发的C#项目。

当添加两个引用,Microsoft.Buld.Engine和Microsoft.Build.Framework时,您会注意到每个版本有两个版本。一个版本是框架2版本,一个是框架3.5版本。由于我尝试构建的项目是在框架2中完成的,因此我导入了框架2版本。这就是错误所在。

解决方案: BinPath应该是框架二的唯一引用,即:“C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727”。 Microsoft.Buld.Engine和Microsoft.Build.Framework应该指向3.5版本,因为构建应用程序的应用程序是在框架3.5中开发的。我想如果它是在框架2中开发的,我首先就不会遇到问题。

答案 3 :(得分:1)

你可以这样试试:

从C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ Microsoft.Build.Engine.dll中找到Assemply。 复制 和 过去进入GAC位置如下所述:

C:\的Windows \组件\ GAC_MSIL \ Microsoft.Build.Engine \ 3.5.0.0__b03f5f7f11d50a3a

它正在运作。由于GAC文件丢失问题。