生产站点上的Report Viewer程序集问题

时间:2013-04-12 16:23:20

标签: asp.net reporting-services

我的生产网站上的报表查看器存在一个奇怪的问题。我在同一台机器上部署了一个舞台和演示版本的站点。最近我一直在进行更新,并已部署到舞台版本,工作正常。今天我部署到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中的所有引用都已更新,并且在我的项目的“引用”中也已更新。我注意到,“Temporary ASP.NET Files”中的版本实际上是版本9出于某种原因。

再次回顾一下;该项目在我的本地机器上正常工作。它也可以在Stage站点上运行,该站点与损坏的Demo站点部署在同一服务器上。

有没有人对我可以做些什么来解决这个问题?我似乎无法找到任何有适合我的解决方案的资源。我尝试了编译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.

2 个答案:

答案 0 :(得分:1)

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

我在家里使用SQL Server运行在我的开发箱上运行2008 Enterprise,2008R2 express和2012 Developer。我遇到了很多关于十六进制错误的问题,并指出了无法找到文件的问题。简单的答案是,如果您可以帮助它,请不要在同一台机器上安装同一产品的多个版本,但我知道并不总是适用于便宜或您拥有的测试。一般情况下,DLL问题与重复我重新将一个dllOLD或类似,然后查看它是否有效。如果您正在使用更合适的方法并明确列出,那就是您。我只是确保DLL确实存在并且可以通过RDP远程到anther环境并同时进行屏幕显示。希望您有两台显示器可以看到一个环境与另一个环境相比;)

答案 1 :(得分:0)

我明白了。事实证明,在演示站点的Bin目录中有一个旧DLL挂出。它没有被新版本覆盖,因为它不再使用,所以它只是坐在那里弄乱了项目。我清理了Demo站点上的bin目录,然后进行了重新部署,它运行正常。谢谢你的帮助。