我已经在这个问题上烧了几个小时,并且已经做了很多搜索以弄清楚发生了什么。
我有一个从.csproj文件加载项目文件的应用程序,因此它引用了Microsoft.Build dll。在我的一台电脑上一切正常。另一方面,当我尝试加载.csproj文件时,应用程序崩溃。
我获得的例外情况属于Microsoft.Build.Exceptions.InvalidProjectFileException
类型,其中包含以下消息:
工具版本" 15.0"无法识别。可用的工具版本是" 14.0"," 2.0"," 3.5"," 4.0"。
起初我不确定导致问题的原因所以我认为我将.dll作为项目的一部分。也就是说,我将.dll复制到项目中的文件夹中,并引用了那些.dll。但是当我运行我的项目时,GAC加载首选项正在咬我,因为输出窗口显示我正在加载一个不同的.dll:
已加载' C:\ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ Microsoft.Build.Framework \ v4.0_15.1.0.0__b03f5f7f11d50a3a \ Microsoft.Build.Framework.dll'。
所以我通过导航到该位置并查看.dll上的属性来查看每台计算机上加载的.dll。
在运行的机器上.dll的版本为15.1.1015。 在无效的机器上.dll的版本为15.3.409
我还没有找到人们谈论这个确切的问题,但我看到人们谈到在升级到Visual Studio 15.3之后遇到问题。果然,无法运行的计算机有Visual Studio 15.3.5,而运行的计算机有Visual Studio 15.2。
为了解决这个问题,我使用此处列出的步骤从GAC中删除了15.3:
Could not load type 'Microsoft.Build.Framework.SdkReference' on project open in VS 2017 U1 (15.3)
唉,即使在这次更改之后,我仍然遇到同样的问题,所以将GAC更改为指向较早的Microsoft.Build.Framework.dll仍然无法解决问题(可能是因为Microsoft中的其他文件) .Build家庭正在以15.3的身份加入GAC?)。我确实验证了GAC加载的版本现在是15.1。
是否有其他解决方法或修复可以解决此问题?
答案 0 :(得分:0)
我希望其他人可以用比这更好的方法回答,但我能够通过在加载项目时强制使用版本14.0来解决问题。我的项目不需要Visual Studio 2017(MSBuild 15.X)。因为它可以在Visual Studio 2015中加载,所以我只需在Project构造函数中指定版本号:
coreVisualStudioProject = new Project(fileName, null, "14.0", new ProjectCollection());