【问题标题】:Microsoft.Build.Engine Error (default targets): Target GetFrameworkPaths: Could not locate the .NET Framework SDKMicrosoft.Build.Engine 错误(默认目标):目标 GetFrameworkPaths:找不到 .NET Framework SDK
【发布时间】:2010-03-17 09:21:05
【问题描述】:

我正在编写一个 web 服务,调用它时应该构建一个 C# 项目。我正在使用框架 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();

success 变量返回 false,因为构建失败。然后我检查 build.log 文件,这是我收到的错误:

构建于 2010 年 3 月 17 日上午 11:16:56 开始 项目 “[Path_Of_Directory]\ProjectName.csproj” (默认目标):目标 GetFrameworkPaths:找不到 .NET 框架 SDK。任务是 寻找 .NET 的路径 所在位置的框架 SDK SDKInstallRootv2.0中指定 注册表项的值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework。 你或许能解决问题 通过执行以下操作之一:1.) 安装 .NET Framework SDK。 2.) 手动将上述注册表项设置为 正确的位置。目标

我不明白为什么它不会构建。任何帮助都感激不尽。谢谢

【问题讨论】:

  • 你到底有什么不明白的?错误消息会准确告诉您首先要检查的内容。你这样做了吗?
  • 是的,注册表值是“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727”,和我经过的bin路径一模一样,所以进退两难跨度>

标签: c# .net msbuild msbuild-buildengine


【解决方案1】:

使用 /ToolsVersion:3.5

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

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

【讨论】:

    【解决方案2】:

    您可以尝试通过构建此项目来验证 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。

    【讨论】:

    • Filbert,你让我更接近我的答案。这是正确的 binpath 文件夹,但是 .csprof 文件引用了另一个项目而不是 .dll 并且正在 binpath 文件夹中搜索该项目,因此出现了错误。我删除了对项目的引用,并在被引用的项目的 bin 文件夹中添加了对 dll 的引用,并且很神奇,它可以工作。
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      你可以这样试试:

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

      C:\Windows\assembly\GAC_MSIL\Microsoft.Build.Engine\3.5.0.0__b03f5f7f11d50a3a

      它正在工作。由于 GAC 文件丢失导致的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-21
        • 2011-03-22
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-28
        相关资源
        最近更新 更多