1

我的生产站点上的报表查看器有一个奇怪的问题。我在同一台机器上部署了站点的舞台和演示版本。最近我一直在进行更新,并一直在部署到运行良好的阶段版本。今天我部署到Demo,突然报表查看器坏了,只在Demo上。

我得到的错误是:

CS0433: The type 'Microsoft.Reporting.WebForms.ReportDataSource' exists in both 
'c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' 
and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\h2o-demo\d354e6e4\ac3ce3e\assembly\dl3\67b85cd6\0027fec0_ed32ca01\Microsoft.ReportViewer.WebForms.DLL'

在此更新中,该项目已从 Report Viewer 9 更新到 10。Web Config 中的所有引用以及我项目的“引用”中的所有引用都已更新。我注意到由于某种原因,放入“临时 ASP.NET 文件”中的版本实际上是版本 9。

再次回顾一下;该项目在我的本地机器上运行良好。它也适用于部署在与损坏的演示站点相同的服务器上的 Stage 站点。

有人对我可以做些什么来解决这个问题有任何想法吗?我似乎找不到任何具有对我有用的解决方案的资源。我尝试了编译 batch = false 并添加了从 9 到 10 的程序集 bindingredirect(尽管我想我可能做错了)。我真的很困惑为什么它会在一个站点上运行,而在另一个站点上却不行。

编辑 1:在环顾四周后,我再次尝试绑定重定向。我的配置文件现在看起来像这样:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.10.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.ReportViewer.WebForms" publicKeyToken="b03f5f7f11d50a3a" />
      <bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0"/>
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.ReportViewer.Common" publicKeyToken="b03f5f7f11d50a3a" />
      <bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

“Log4Net”重定向已经存在,并且是舞台上唯一的东西。添加“WebForms”后,“Common”出现错误,因此我也添加了该错误。现在我收到此错误:

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' or one of its dependencies. The system cannot find the file specified.
4

2 回答 2

1

此错误看起来像您有多个程序集,然后通过指向程序集的显式 GUID 来纠正该问题,现在您缺少一个。您能否验证“log4net”程序集是否存在?如果你有一个现有的工作 SSRS 系统,我会看看。查看该配置是否相同以及该程序集的该文件是否存在。如果是这样,您可以随时尝试将其复制到非工作环境中。在许多情况下,程序集或类库要么被另一部分更改或覆盖。在一台机器上运行多个版本的类似产品有时很困难。

我在家中使用 SQL Server 在我的 2008 Enterprise、2008R2 express 和 2012 Developer 的 Dev box 上运行。我遇到了很多关于十六进制错误的问题,以及它们指向无法找到文件的问题。简单的答案是,如果您能提供帮助,请不要在同一台机器上安装同一产品的多个版本,但我知道这并不总是适用于廉价或您拥有的测试。通常对于重复的 DLL 问题,我将一个重新列出为 dllOLD 或类似的,然后查看它是否有效。如果您正在执行更正确的方法并明确列出,那么您就是。我只想确保 DLL 确实存在,并且可以通过 RDP 远程到另一个环境并同时启动该屏幕。希望您有两台显示器来查看一个环境与另一个环境的对比;)

于 2013-04-12T17:35:54.453 回答
0

我想到了。原来在演示站点的 Bin 目录中有一个旧的 DLL。它没有被新版本覆盖,因为它不再使用,所以它只是坐在那里以某种方式搞乱项目。我清理了演示站点上的 bin 目录,然后重新部署,它工作正常。谢谢你们的帮助。

于 2013-04-12T17:48:30.530 回答