Winforms 在 VS2012 中出现“无法加载文件或程序集'Microsoft.ReportDesigner, Version=10.0.0.0'”错误。

13
这让我感到很烦恼。我有一个使用VS2012构建并针对.NET 4.5的WinForms应用程序。在一些窗体中,我必须使用ReportViewer。起初我使用的是ReportViewer 2012(版本11.0.0.0),一切都工作正常。但是,我的客户不想在他们的工作站上安装此版本,因为此版本使用CLR Types SQL 2012。暂时请勿询问我为什么,但我必须接受这一点。
因此,我决定使用以前的报表查看器版本10.0.0.0。我下载了分发包并进行了安装。我还将其添加到了VS2012的工具箱中,并删除了已在我的项目中引用的报表查看器dll。但是,当我将10版报表查看器拖到我的窗体上时,我会收到以下错误:
无法加载文件或程序集“Microsoft.ReportDesigner,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其任何依赖项。所定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040) 应用程序没有出错,但是我的窗体在使用此报表查看器控件时没有设计时支持,如图所示。我想摆脱这个错误。
我检查了全局程序集缓存(GAC),没有找到所提到的Microsoft.ReportDesigner。它存在于版本9.0.0.0和11.0.0.0中,但不存在于10.0.0.0中。
最重要的是,如何在VS2012中设计时使用ReportViewer版本10.0.0.0而不出现设计时错误?
框架:.NET 4.5 应用类型:WinForms 语言:VB.Net Visual Studio:版本2012 控件:ReportViewer 10.0.0.0 SP1
附注:我还在VS2010中测试了ReportViewer控件,在VS2010中使用它没有问题。
[更新]
在尝试在VS2012中将ReportViewer添加到我的表单时,出现的确切错误是:

1
对我来说最大的谜团是你是如何将它添加到工具箱中的。redist包只是用于在客户机上获取ReportViewer,它并不提供引用程序集。如果你在GAC中找不到它,很容易解释,你可能看错了。它被添加到v2 GAC而不是v4 GAC。在c:\windows\assembly中查找。在你的问题中提供更多关于你在哪里找到引用程序集的信息,这一步出错了。 - Hans Passant
1
将工具箱添加到工具箱很容易。当选择项目时,只需转到Reportviewer.Winforms.dll,然后它就会出现在工具箱中。然而,您只能使用一个报表查看器。要么是随VS2012一起提供的版本,要么是VS2010。至于GAC的问题,我检查了C:\ windows \ assembly。我得到了版本9.0.0.0和11.0.0.0。没有10.0.0.0版本。但我们现在采用其他路线。因此,解决此问题不再是最高优先级。感谢回复,不过我仍然很好奇如何解决它。;-) - Stephan
6个回答

11

我也遇到了同样的问题。我通过以下解决方法修复了VS 2012设计器问题。虽然我认为这不是正确的方法,但它确实有所帮助,目前我没有找到更好的解决方法。

  1. 关闭 Visual Studio 2012

  2. 进入 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies 文件夹并将所有报表查看器程序集(文件名以"Microsoft.ReportDesigner."开头,版本为10.0.0.0)复制到 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies。在进行此操作之前,请备份这些文件。

  3. 启动 Visual Studio 2012 并打开您的项目。


1
Alex的答案对我有用,但这是否意味着我们现在正在使用旧版本的控件?这会引起任何问题吗? - NCGrimbo
还有另一种解决方案,与之前的相反,即将 Report Viewer 11 控件从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies 复制到 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies。这也很有帮助,据我所知,您最终会得到设计器版本 11。 - Alex Kryvdyk
1
为什么不直接引用Visual Studio所期望的ReportViewer版本,手动更新引用 - 根据错误报告中的相应目录:https://connect.microsoft.com/VisualStudio/feedback/details/607566/reportviewer-error - 将PrivateAssemblies复制到不同版本并不是一个好主意... - Jeremy Thompson
如果您要这样做,在执行之前,请备份您将要替换的 V.11 文件。然后,如果需要,您可以恢复它们。此外,最好创建批处理文件以通过按需复制适当的版本来在版本之间切换(仍需重新启动 VS)。然后,最好始终将原始文件留在该目录中,每次编辑会话结束后将版本 11 文件复制回去。如果您的老板突然借用您的机器,它不会捣乱并引起他们的愤怒。 - MicroservicesOnDDD

8

Alex的解决方案是错误的,能用但不正确。

简单的解决方案是使用当前版本的dll替换旧的引用。

我已经移除了引用Microsoft.ReportViewer.WinForms,然后添加了引用Microsoft.ReportViewer.WinForms,它的版本是v11.0.0.0。

希望这可以帮到你。


这是一个很好的解决方案,如果你准备从v10.0.0.0升级到v11.0.0.0。版本11运行良好。 - timothy

2

2
亚历克斯的解决方法是有效的,但你会回到控件先前的版本。要获取报表查看器控件的v11版本,请关闭您的项目(如果已打开),然后浏览到c:\windows\assembly。复制Microsoft.ReportViewer.Common.Resource版本11.0.0.0的公钥令牌值。打开您的项目文件并搜索对ReportViewer 10.0.0.0版本的引用。将版本更改为11.0.0.0,将公钥更改为您复制的值,然后保存文件。一旦您打开项目,ReportViewer引用应该指向正确的版本。

0

将dll上传到您的站点bin目录中

从此窗口文件夹(C:\Program Files (x86)\Microsoft Visual Studio 10.0\ReportViewer)中。我已经使用它并且它可以工作 Microsoft.ReportViewer.Common.dll Microsoft.ReportViewer.WebForms.dll Microsoft.ReportViewer.WinForms.dll


0

使用以下路径添加引用: C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.Common.dll

C:\Program Files (x86)\Microsoft Visual Studio 14.0\ReportViewer\Microsoft.ReportViewer.WinForms.dll


这看起来不像是版本10.0.0.0,而更像是12.0.0.0。 - MicroservicesOnDDD

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