【发布时间】: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