rho*_*dri 16 .net c# msbuild jenkins visual-studio-2012
我们正在尝试设置一个Jenkins(构建服务器)作业来构建基于VSTO的Office加载项.但是,在DLL被复制到bin项目目录后,我不断收到一个奇怪的错误,导致构建过程失败:
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'
Run Code Online (Sandbox Code Playgroud)
所以问题是由Office加载项构建目标触发的"FindRibbons"任务已成功将MyAddIn DLL识别为Office加载项,但无法找到并加载它!
有任何想法吗?我希望能够直接调试FindRibbons任务,但挂钩并调试编译过程似乎有点极端......
以下是一些观察结果:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\)以及其他地方.在我的开发机器上,MyAddIn没有Fusion日志条目!但构建过程成功,Kivo工作正常.WhereRefBind!Host=(LocalMachine)!FileName=(PresentationCore.dll)并ExplicitBind!FileName=(MyAddIn.dll)显示绑定成功.我有这个问题.这显然是因为我将引用"Microsoft.Office.Tools.Common.v4.0.Utilities"中的"复制本地"设置从True更改为False.ISYN.(我不是吗)
我已经将一个项目从VS2012升级到VS2013,并注意到该引用是唯一设置为"Copy Local = True"的引用.所以我把它设置为假,因为它是不同的.这导致了错误.将它改回True可以解决它.
小智 7
每次我升级Visual Studio时这都适用于我 - 我不使用色带顺便说一句.
这适用于我的解决方案,但使用风险由您自行承担:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targetsv10.0部分可能与您不同,例如它可能是v14.0)删除以下部分:
<FindRibbons AssemblyName="$(AbsolutePathToCustomization)" TargetFramework="$(TargetFrameworkVersion)">
<Output TaskParameter="RibbonTypes" ItemName="RibbonTypesCollection"/>
</FindRibbons>
Run Code Online (Sandbox Code Playgroud)"@(RibbonTypesCollection)"用"" 替换所有出现的内容.4.保存文件并重新启动visual studio
小智 5
我有相同的错误消息,最后找到了一个修复程序.问题源于VSTO项目针对.NET 4.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
Run Code Online (Sandbox Code Playgroud)
修复是更新.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>
Run Code Online (Sandbox Code Playgroud)
对于那些需要同时引用DLL的新版本和旧版本的人,请注意理论上可以使用:
extern alias XmlDll1
using XmlDll1::System.Xml
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅http://geekswithblogs.net/narent/archive/2008/11/11/126940.aspx.
此问题也可能是由于将对未签名程序集的引用添加到签名/强命名加载项项目而引起的。就我而言,我添加了 RestSharp Nuget 包,并在代码中引用 RestSharp 后就开始在构建时收到此错误。经过一番挖掘,我注意到 RestSharp 是项目引用中唯一未签名的程序集。如果您遇到此问题,有 3 种可能的解决方案:
这里可能有点晚了,但我只是自己解决了这个问题 - 在遵循了许多建议(通过谷歌)之后,所有这些都没有解决我的问题,我手动走了下去。结果我编译了一组带有较低版本(不是最新)的依赖程序集的库。在我的主要项目中,我也引用了此依赖项,但它是通过 nuget 拉取的,并且是最新且最好的版本。由于某种原因,VS.NET 无法弄清楚这一点,并且会完全出错并删除您发布的错误。一旦我将库集更新到依赖项的最新版本,一切都正常工作。
疯狂的是——一开始运行得很好,然后突然出现了问题。希望这对某人有所帮助。
启用 Fusion 后,输出显示它正在 msbuild/ 文件夹中查找程序集。
| 归档时间: |
|
| 查看次数: |
8825 次 |
| 最近记录: |