使用VS 2010和FindRibbons出现构建错误

4
我有VS 2010、2012和2013。我从svn获得了一个现有的项目,因此它以前从未在我的机器上出现过。当我尝试编译时,出现了以下错误。
The "FindRibbons" task could not be loaded from the assembly            
'Microsoft.VisualStudio.Tools.Office.BuildTasks, 
Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.  Confirm that the   
<UsingTask> declaration is correct, that the assembly and all its dependencies are   
available, and that the task contains a public class that implements   
Microsoft.Build.Framework.ITask.

我发现有几篇帖子提到要前往

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\OfficeTools

打开 Microsoft.VisualStudio.Tools.Office.targets 文件并将所有 10.0.0.0 替换为 12.0.0.0,我已经完成了这一步,但随后出现了以下错误。
The "FindRibbons" task has been declared or used incorrectly, or failed during construction. Check the spelling of the task name and the assembly name.

你能否在Visual Studio中删除并重新添加引用? - johnjps111
你尝试过更改为11.0.0.0吗? - Pranav Singh
是的,我也尝试过了。没有帮助。看起来某个 Visual Studio 更新破坏了这个“FindRibbons”任务(错误的程序集版本或引用 - 没有头绪)。尝试卸载所有版本的 Visual Studio,然后按升序重新安装它们(2013 并带上 Update4)。对我有用。 - Nikolay
2个回答

5
这很可能是DLL Hell问题,您在GAC中安装了错误版本的Microsoft.VisualStudio.Tools.Office.BuildTasks.dll。缺少FindRibbons类
这有一个还算不错的解释,VS2012的早期预览版部署了一个缺少该类的DLL。在此MSDN论坛线程中讨论过。提出了你已经尝试过的同样的解决方法,但并非解决方案。否则,提醒您永远不要在需要完成工作的计算机上安装Visual Studio的测试版。
问题更加复杂,因为MSDN文档说该类仅适用于VS2012及以上版本,而不适用于VS2010。当您安装了VS2013时,必须有一个<bindingRedirect>将版本10.0.0.0和11.0.0.0转发到12.0.0.0。不确定在哪里,我找不到它在我的机器上。
不用说,这就是DLL Hell问题的最糟糕情况。两种可能的解决方案:
  • Visual Studio不再自动升级项目文件。但在这种情况下,您将需要使用VS2013工具链。使用文本编辑器(记事本即可)编辑.csproj文件,并将ToolsVersion属性更改为“12.0”。

  • 修复GAC并摆脱DLL的错误版本。首先需要一个正确的版本,可以从具有已知此DLL的良好副本的其他计算机上复制它。您可以在资源管理器中找到它,导航到C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.Tools.Office.BuildTasks。您可能有多个子目录,在VS2013中只有一个。 12.0子目录中的DLL日期为8/7/2014,大小为102,688字节。您可以使用反编译器(如Reflector或ILSpy)来仔细检查它是否包含FindRibbons类。

如果所有这些都不起作用,则可以尝试重新安装所有内容。仍然重要的是要修复损坏的原始源,如果确实在该计算机上安装了VS2012的早期版本,则很难做到这一点。运行setup.exe /uninstall /force通常会摆脱它。祝你好运,解决这个问题从未是一件有趣的事情。

-1

尝试打开 csproj 文件并查找 <ItemGroup>,在其中您应该会看到一个包含 <HintPath><Reference Include="Findribbons">。您可能需要查看它是否引用了您正在引用的库文件的正确(或任何)版本。

特别是对于下载的项目,您会发现引用有时设置不正确(绝对路径)。


我的vbproj文件中没有Include=FindRibbons。 - hawbsl
你有这个项目的链接吗? - Chavez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接