2013-11-26 169 views
11

我们正在尝试设置一个Jenkins(构建服务器)作业,以构建基于VSTO的Office加载项。不过,我不断收到一个奇怪的错误的DLL被复制到bin目录中的项目后失败的构建过程:构建Office加载项时的程序集绑定错误:“FindRibbons”任务意外失败

Error 11 The "FindRibbons" task failed unexpectedly. 
System.IO.FileNotFoundException: 
    Could not load file or assembly 'MyAddIn, Version=1.0.0.0, Culture=neutral, 
    PublicKeyToken=null' or one of its dependencies. 
    The system cannot find the file specified. 
File name: 'MyAddIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 

所以问题是,“FindRibbons”任务,该厅添加 - 触发在构建目标中,已成功将MyAddIn DLL标识为Office加载项,但无法找到并加载它!

任何想法?我很想能够直接挂钩,但进入和调试编译过程似乎有点极端调试FindRibbons任务...


这里有一些意见:

  • 在我们构建服务器的用于绑定MyAddIn程序集的Fusion日志,它看起来像在MSBuild.exe所在的文件夹(C:\Windows\Microsoft.NET\Framework\v4.0.30319\)以及其他地方查找。 在我的开发机器上,MyAddIn没有Fusion日志条目!但构建过程成功,Kivo正常工作。
  • 在我的开发和构建机器上,我也有融合日志条目WhereRefBind!Host=(LocalMachine)!FileName=(PresentationCore.dll)ExplicitBind!FileName=(MyAddIn.dll),它们显示绑定成功。
  • 无论我使用Visual Studio或MSBuild从命令行构建项目,构建服务器上都会出现此错误。
  • 我确保.NET/MSBuild/VS2012版本在我的开发机器和构建服务器上都是相同的,并且错误仍然存​​在。唯一的区别似乎是构建服务器正在运行Windows Server 2012(因为它是Azure,我们无法启动Windows 7映像)。

回答

2

可能会有点晚,但我只是为自己解决这个问题 - 在遵循无数建议(通过谷歌)后,所有这些都没有解决我的问题,我手动下线。原来,我编译了一套具有较低版本(不是最新版本)的相关程序集库。在我的主项目中,我也提到了这种依赖关系,但它是通过nuget提取的,最新版本为&。出于某种原因,VS.NET无法解决这个问题,并会完全跳出来,并放弃您发布的错误。一旦我将库集更新到最新版本的依赖项,所有这些都正常工作。

疯狂的部分是 - 它最初运行良好,然后出现问题的地方。希望这可以帮助一路上的人。

启用Fusion后,输出显示它正在寻找msbuild /文件夹中的程序集。

+1

是的,更新使用的NuGet更新包中的所有我的包裹解决这个错误我。谢谢:) –

2

我有同样的错误,没有互联网的答案帮助我解决这个问题。我得到这个错误的原因是因为我引用了一个类型为Console Application的程序集。我将该程序集更改为ClassLibrary类型,而且我没有再遇到这种异常。

另外,我只会从位于我的ConsoleApplication上的类继承时得到该异常。它让我永远花费了解。

4

我有相同的错误信息,并最终找到了一个修复程序。这个问题源于针对.NET 4的VSTO项目。0(这似乎是VSTO4的最小值),同时也引用了为.NET 3.5构建的程序集。真正的罪魁祸首是我在VSTO项目中有一个类,该项目是从.NET 3.5程序集中定义的接口派生的,该接口又从.NET 3.5库接口派生而来。即,

using System.Xml; 
    class MyVSTOClass : IMy35AssembyInterface // This caused the error 
    class MyVSTOClass : IXmlSerializable  // This compiled OK 

    using System.Xml; 
    interface IMy35AssembyInterface : IXmlSerializable 

此修复程序是更新的.csproj显式引用system.xml.dll的和System.Data.dll中的旧版本,否则默认为4.0和冲突与3.5组件引用。

<Reference Include="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> 
      <!--<Aliases>Data2</Aliases>--> 
      <HintPath>C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll</HintPath> 
      <SpecificVersion>True</SpecificVersion> 
      <Private>False</Private> 
    </Reference> 

 <Reference Include="System.XML, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> 
      <!--<Aliases>Xml2</Aliases>--> 
      <HintPath>C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll</HintPath> 
      <SpecificVersion>True</SpecificVersion> 
      <Private>False</Private> 
    </Reference> 

对于那些谁需要同时引用既DLL的新和旧版本,请注意,它在理论上可以使用:

extern alias XmlDll1 
using XmlDll1::System.Xml 

更多信息,请参见http://geekswithblogs.net/narent/archive/2008/11/11/126940.aspx

0

我有同样的问题,甚至在阅读KKG的答案后,我无法解决我的问题。

事实证明,这对我来说简单得多,但不会让人感到沮丧和费时。我在一个Win8.1虚拟机中工作,默认情况下它并不附带.net3.5。我的.net4 VSTO4项目引用了一个需要3.5地方的程序集。同样的项目编译发现我的另一个虚拟机是Server2008和3.5启用。

5

我有这个问题。这显然是由于我将参考“Microsoft.Office.Tools.Common.v4.0.Utilities”上的“Copy Local”设置从True更改为False而导致的。 ISYN。 (我不*你)

我已经从VS2012项目升级到VS2013,并注意到该参考是唯一一个设置为“复制本地= True”。所以我把它设置为假,因为它不同。这导致了错误。把它改回True解决了它。

+1

对不起。这不是我写的文字。 WTF与某人“编辑”我的评论? – RokShox

+0

几乎任何人都可以编辑帖子以使其更清晰或修正错误。历史被保留下来,如果有恶意的话可以恢复。 – Chris

7

如果你迁移从以前版本的Visual Studio的项目,一定要卸下ExcelLocale1033SecurityTransparent从AssemblyInfo.cs文件属性

(由姆斯瓦蒂在这个其他question回答)如果项目仍然无法构建,可能是因为您的.csproj文件对Visual Studio早期版本的msbuild任务有一些引用。我建议您创建一个新的空Excel AddIn项目,并使用新项目文件的msbuild结构作为项目的基础。

+0

是的,我从2010年VS迁移到VS 2012 删除“SecurityTransparent”帮助,谢谢! – Boogier

+0

这也是我的问题。谢谢!! – TrialAndError

5

这对我每次升级Visual Studio都有效 - 我不使用丝带顺便说一句。

这个工作对我的解决方案,而是使用您自己的风险:

  1. 公开赛在XML编辑器下面的文件(让先备份):C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(10.0版本的部分可能是你不同,例如,它可能是v14.0)
  2. 删除以下部分:

    <FindRibbons AssemblyName="$(AbsolutePathToCustomization)" TargetFramework="$(TargetFrameworkVersion)"> 
        <Output TaskParameter="RibbonTypes" ItemName="RibbonTypesCollection"/> 
    </FindRibbons> 
    
  3. 与替换的"@(RibbonTypesCollection)"所有的 “” 4。保存文件并重新启动

0

这个问题也可以通过添加引用未签名的组件,以一个符号/强命名的附加项目造成的视觉工作室。在我来说,我添加了RestSharp NuGet包开始,只要我在代码中引用RestSharp收到关于构建此错误。经过一番挖掘,我注意到RestSharp是项目引用中唯一的未签名程序集。如果你有这个问题,有三种可能的解决方案:

  1. 在RestSharp的情况下,
  2. 如果您有机会获得源代码,你可以配置Visual Studio来构建在项目属性页面组件的签名版本。
  3. 如果您没有访问源代码,您可以通过以下these instructions签名用自己的密钥集。
相关问题