为什么Microsoft.Build.Framework.dll 15.3没有加载csproj,15.1呢?

时间:2017-09-23 20:35:34

标签: c# msbuild visual-studio-2017 gac csproj

我已经在这个问题上烧了几个小时,并且已经做了很多搜索以弄清楚发生了什么。

我有一个从.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。

是否有其他解决方法或修复可以解决此问题?

1 个答案:

答案 0 :(得分:0)

我希望其他人可以用比这更好的方法回答,但我能够通过在加载项目时强制使用版本14.0来解决问题。我的项目不需要Visual Studio 2017(MSBuild 15.X)。因为它可以在Visual Studio 2015中加载,所以我只需在Project构造函数中指定版本号:

coreVisualStudioProject = new Project(fileName, null, "14.0", new ProjectCollection());