【问题标题】:Error MSB4019 when using the MSBuild API while MSBuild.exe works fine使用 MSBuild API 时出现错误 MSB4019,而 MSBuild.exe 工作正常
【发布时间】:2017-11-09 14:08:45
【问题描述】:

我正在开发一个 C# 应用程序,它将使用 MSBuild API 来构建一个 C++ 项目。我正在测试的 C++ 项目是一个完全空的项目。当我尝试通过命令行使用 MSBuild.exe 编译它时,它工作正常。我用

MSBuild.exe C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj /p:Platform=x86

但是当我改为使用 MSBuild API 时:

Dictionary<string, string> globalProperty = new Dictionary<string, string> { { "Configuration", "Debug" }, { "Platform", "x86" } };
BuildParameters buildParameters = new BuildParameters(new ProjectCollection()) { Loggers = new List<ILogger> { new ConsoleLogger(LoggerVerbosity.Detailed) } };
BuildRequestData buildRequest = new BuildRequestData(@"C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj", globalProperty, "4.0", new[] { "Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest);

我收到以下错误:

Building with tools version "15.0".
C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj(27,3): error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Done building project "Project1.vcxproj" -- FAILED.

此外,当我在 Windows\Framework64\v4.0* 中使用 MSBuild 尝试此操作时,我 确实 得到了与我使用位于 Program Files (x86)\ 中的 MSBuild 时相同的错误Microsoft Visual Studio 2017\Community\MSBuild\15.0\Bin\amd64

为了确保我使用的是 15.0,我已将他添加到我的 app.config 中,但它似乎没有任何区别:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Build.Framework" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

我在这里可能做错了什么/误解了?

更新:我发现我引用了 4.x 版的 Microsoft.Build.x。删除了引用并将其替换为 v15.x。现在构建失败,出现 0 个错误和 0 个警告。查看输出:

Build started 09/11/2017 16:36:04.
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual 
Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\$(MSBuildToolsVersion)\Microsoft.Common.props using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
Property reassignment: $(MSBuildProjectExtensionsPath)="C:\Users\MyName\source\repos\Project1\Project1\obj\" (previous value: "obj\") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Microsoft.Common.props (58,5)
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\* using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Property reassignment: $(Platform)="Win32" (previous value: "x86") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Default.props (30,5)
Property reassignment: $(PlatformToolset)="v100" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\Win32\Platform.default.props (26,5)
Property reassignment: $(PlatformToolset)="v141" (previous value: "v100") at C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj (31,5)
Property reassignment: $(_PlatformFolder)="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\Win32\" (previous value: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\\Platforms\Win32\") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\Win32\Platform.props (15,5)
Property reassignment: $(WindowsSdkDir_10)="C:\Program Files (x86)\Windows Kits\10\" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.props (18,5)
Property reassignment: $(TargetExt)=".exe" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (29,5)
Property reassignment: $(WindowsSdkDir_81)="C:\Program Files (x86)\Windows Kits\8.1\" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (55,5)
Property reassignment: $(NETFXKitsDir)="C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (163,5)
Property reassignment: $(NETFXSDKDir)="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\" (previous value: "") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (165,5)
Property reassignment: $(WindowsSDK_ExecutablePath_x86)="C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86;;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" (previous value: "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86;") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (169,5)
Property reassignment: $(WindowsSDK_ExecutablePath_x64)="C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64;;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64" (previous value: "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64;") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props (170,5)
Property reassignment: $(_PropertySheetDisplayName)="Multi-byte Character Support" (previous value: "Core Windows Libraries") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.MultiByteCharSupport.props (15,5)
Property reassignment: $(_PropertySheetDisplayName)="Application" (previous value: "Multi-byte Character Support") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Application.props (15,5)
Property reassignment: $(ExtensionsToDeleteOnClean)="*.cdf;*.cache;*.obj;*.obj.enc;*.ilk;*.ipdb;*.iobj;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.xml;*.metagen;*.bi;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.exe.manifest;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.tlb;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.pdb;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.exe;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.bsc;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.ilk;C:\Users\MyName\source\repos\Project1\Project1\Debug\Project1.exe.intermediate.manifest" (previous value: "*.cdf;*.cache;*.obj;*.obj.enc;*.ilk;*.ipdb;*.iobj;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.xml;*.metagen;*.bi") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets (35,5)
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportBefore\* using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Property reassignment: $(MSBuildAllProjects)=";C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.targets;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.NETFramework.CurrentVersion.props" (previous value: ";C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.targets") at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.NETFramework.CurrentVersion.props (29,5)
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild;$(MSBuildProgramFiles32)\MSBuild
__________________________________________________
Project "C:\Users\MyName\source\repos\Project1\Project1\Project1.vcxproj" 
(Build target(s)):

Building with tools version "15.0".

Done building project "Project1.vcxproj" -- FAILED.
The thread 0x219c has exited with code 0 (0x0).

Build FAILED.
    0 Warning(s)
    0 Error(s)

【问题讨论】:

  • 我和你BuildManager的结果一样,上网查了一下,发现Microsoft.Build v15.x:github.com/Microsoft/msbuild/issues/2369有一个bug,可能是这个问题。
  • 看来你是对的。我的配置中已经有了一个 assemblyBinding,似乎只需要对其他引用执行相同的操作。我会尽快添加一个回答并参考您的评论。感谢您的链接,还没有遇到那个!

标签: c# c++ msbuild visual-studio-2017


【解决方案1】:

正如 Leo-MSFT 在对我的问题的评论中指出的那样,Microsoft.Build 版本 15.x 中存在一个错误(请参阅 https://github.com/Microsoft/msbuild/issues/2369)。解决方案 - 或者更确切地说,临时解决方法 - 是将以下内容添加到帖子中链接的配置文件中(来自:https://github.com/IntelliTect/Coalesce/commit/4d9024ba441af39c8e77e5d30174e67317ed91e0):

<runtime>
<!-- TODO: We can probably remove this once MSBuild issue 2369 is fixed: https://github.com/Microsoft/msbuild/issues/2369#issuecomment-323139518-->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Build.Utilities.Core" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
    <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Build.Framework" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
    <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

此修复适用于 Visual Studio 2017 版本 15.3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多