由于处理器体系结构不匹配,MSBuildWorkspace.OpenSolutionAsync(solutionPath)无法编译

时间:2019-05-30 22:49:04

标签: c# roslyn

在Visual Studio 2017中,我创建了一个针对4.6.2的独立代码分析工具项目。我按原样使用模板化代码,除了为工作区.OpenSolutionAsync()调用指定了.sln文件。

我尝试使用此Roslyn方法进行编译的解决方案包含Platform = Any CPU的项目和Platform = x64的项目。设置为混合平台时,该解决方案在VS2017中可以正常编译。

但是,OpenSolutionAsync()调用会生成以下几种编译错误:


Msbuild在处理带有消息的文件'C:\ MyProj.csproj'时失败:C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Microsoft.Common。 CurrentVersion.targets:(2110,5):正在构建的项目“ MSIL”的处理器体系结构与引用“ C:\ MyUnmanagedLibrary.dll”,“ x86”的处理器体系结构之间不匹配。这种不匹配可能会导致运行时失败。请考虑通过Configuration Manager更改项目的目标处理器体系结构,以使您的项目和引用之间的处理器体系结构保持一致,或者依赖于具有与项目目标处理器体系结构相匹配的处理器体系结构的引用。


在配置管理器中将MyUnmanagedLibrary项目设置为使用Platform = x64进行构建时,为什么会抱怨x86?我该如何解决?这段代码在一天前运行良好,据我所知,除了将代码复制到PC上的其他目录之外,没有任何改变。

1 个答案:

答案 0 :(得分:2)

此行为的原因是,我的一些项目的输出路径为bin \ Debug \,而其他项目的输出路径为bin \ x64 \ Debug。但是,当您调用OpenSolutionAsync()时执行的生成过程似乎假定为bin \ Debug。它正在bin \ Debug \文件夹中找到旧的x86版本的DLL,而不是在bin \ 64 \ Debug \文件夹中查看DLL。将所有项目的输出路径更改为bin \ Debug \后,OpenSolutionAsync()进程即可正常工作。