我们使用 VS2008 SP1 用 C# 编写代码。我们有一台运行 Team System Server 2008 的服务器,我们将其用于源代码控制、任务等。该服务器也是我们用于Team Build的构建机器。这已经工作了很长时间了。直到目前。当我们尝试构建一个引用了一个外部程序集的项目时,我们会收到这些错误消息(这发生在 Team Build 中,以及在物理登录并通过 Visual Studio 进行常规构建时):
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets :警告 MSB3246:已解析文件的图像错误、没有元数据或无法访问。无法加载文件或程序集“C:\Program Files\Syncfusion\Essential Studio\7.1.0.21\Assemblies\3.5\Syncfusion.XlsIO.Base.dll”或其依赖项之一。该模块应包含程序集清单。
C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets(24,2):错误 MSB4062:无法从 Microsoft 程序集加载“Microsoft.Reporting.RdlCompile”任务。 ReportViewer.Common,版本=9.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a。无法加载文件或程序集 'Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。该模块应包含程序集清单。确认声明正确,并且程序集及其所有依赖项都可用。
找不到引用的组件“Syncfusion.XlsIO.Base”。
这些错误是针对一个有一个有问题的程序集引用的项目。当我尝试构建整个解决方案时,当然会因为这个错误而出现更多错误。还有另外两个项目与其他程序集引用有相同的问题。我有一个 VS 似乎无法解析的引用程序集列表:
- Microsoft.ReportViewer.Common
- Microsoft.ReportViewer.WinForms
- Syncfusion.Compression.Base
- Syncfusion.Core
- Syncfusion.XlsIO.Base
Syncfusion 程序集来自第 3 方组件包。其他两个与 Microsoft ReportViewer 组件有关。
引用是通过.NET 选项卡中的“添加引用”窗口添加的,所以我认为这没有任何可疑之处。在程序集引用的属性窗口中,Culture、Description、Path、Runtime Version 或 Strong Name 中没有值。版本说 0.0.0.0 和 Resolved 是 False。我想很明显 VS 无法解析引用。我的问题是为什么???我为这个问题挠了挠头。这仅发生在服务器上,该解决方案在我的机器和我的同事机器上都构建得很好。装配参考属性在我们的机器上很好。
我尝试卸载3rd-party 组件(当然是在服务器上),然后重新安装。没有帮助。我试图修复VS2008安装。没有帮助。试图从源代码控制中检索早期版本(我知道以前在服务器上构建过),但我得到了相同的错误消息。我检查了文件权限,一切似乎都井井有条。我的想法已经不多了...
我该如何解决这个问题?
2009 年 2 月 16 日更新:
我试图比较我的电脑和服务器上的 dll 的 ildasm 输出(请参阅我写的关于此的评论),在我看来是评论的一行中有一个小差异。我必须承认我根本不明白为什么会有区别,所以也许有人可以向我解释一下?我还尝试在服务器上
运行病毒扫描。没有帮助。试图删除引用,然后通过浏览磁盘上的 dll 来读取它。没用。
2009 年 3 月 17 日更新:
我找到了解决方案!罪魁祸首是Panda Antivirus 的 TruPrevent 模块。禁用模块后,一切正常!=)我在fuslogvw.exe及其生成的日志
的帮助下发现了这一点。谷歌搜索结果,偶然发现了这个博客条目。. 希望这可以帮助其他人。