因此,我有一个 C# Windows 工作流程项目,它以编程方式创建报告并将其通过电子邮件发送出去。它在我的本地计算机上运行良好,但将其放在另一台计算机上的调度程序上会生成以下错误:
无法加载文件或程序集“Microsoft.ReportViewer.Common,Version=11.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
基于其他主题,我尝试从以下地址安装 MICROSOFT® REPORT VIEWER 2012 RUNTIME:http://www.microsoft.com/en-us/download/details.aspx?id=35747。这没有帮助。这是绝大多数普遍的解决方案,但我希望有任何其他建议或意见。
接受的答案为我指明了正确的方向。然而,没有提供足够的细节让我达成解决方案。我想将其添加为对该答案的评论,但它太长了。
在我的 VS 项目中,我引用了 Microsoft.ReportViewer.WinForms 版本 12.0.0.0,并且在部署到另一台计算机时出现了与此问题相同的错误。问题的关键在于错误的一部分:
找到的程序集的清单定义与程序集不匹配 参考。
它告诉你它找到了一个名称正确的DLL,但版本错误。我通过引用对话框添加了对 Microsoft.ReportViewer.Common 的引用,但我没有发现引用对话框的“扩展”部分中列出的唯一一个是针对版本 10.0.0.0 的。因此,如果你告诉它部署错误的,它当然会部署错误的。
您需要做的是在系统上找到版本为 12.0.0.0 的 Microsoft.ReportViewer.Common.dll 文件,并手动包含对该文件的引用。对我来说它位于以下目录中:
C:\Windows ssembly\GAC_MSIL\Microsoft.ReportViewer.Common .0.0.0__89845dcd8080cc91\
在我的 VS 项目中添加该引用并将两个 DLL 设置为“复制本地”后,一切都可以在已部署的计算机上运行。
注意:我不需要需要安装 Microsoft Report Viewer 2012 Runtime 才能使其在已部署的计算机上运行。对于像我一样想要在部署过程中避免任何其他安装的人。
尝试将 dll 文件添加到项目中: C:\Program Files\Microsoft Visual Studio 10.0\ReportViewer 发布项目后将它们添加到bin文件夹中