搜索了很多类似的帖子,解决方法后,我决定自己发帖。
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0433:
The type
'Microsoft.Reporting.WebForms.ReportViewer'
exists in both
'c:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\reportmanager\Bin\ReportingServicesWebUserInterface.dll'
and
'c:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll'
更新
大多数similair帖子的问题是他们的2个冲突的DLL有8.0.0.0和9.0.0.0版本左右。或者它们位于TEMPORARY文件夹中。我不认为我的问题可以通过此类帖子类似地解决。
在我们的ReportServer上有一个Report.aspx,它呈现一个报告。我想用我自己的文件替换这个文件,修改页面布局,如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="WebApplication._Default" %>
<%@ Register
Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms"
TagPrefix="rsweb" %>
<!DOCTYPE>
<html>
<head runat="server"></head>
<body>
<div>
<form id="reportform" runat="server">
<div>
<rsweb:ReportViewer
ID='ReportViewerRoot'
runat='server'
ProcessingMode='Remote'
Height='100%'
Width='100%'
AsyncRendering='False'
SizeToReportContent='True'
/>
</div>
</form>
</div>
</body>
</html>
这需要引用MS.ReportViewer.WebForms.DLL
我的Project.csproj文件包含:
<Reference Include="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
我无法卸载C:\ WINDOWS中的任何DLL,因为它说它是其他应用程序所必需的。
我还尝试修改web.config,添加一些dependentAssemnly,但不确定什么是有用的(它对上面提到的版本差异很有用)。
此外,我在web.config中有这些行:
<compilation defaultLanguage="c#" debug="false" tempDirectory="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\RSTempFiles\">
<assemblies>
<clear />
<add assembly="ReportingServicesWebServer" />
</assemblies>
</compilation>
感谢您的投入。 我期待收到你的建议。
答案 0 :(得分:10)
满意的解决方案!
在aspx中插入ReportViewer对象时,会自动添加DLL引用(并指向 GAC WebForms )。我需要这个引用(无法成功手动引用GAC DLL),然后我删除了aspx中的ReportViewer。另外,我添加了对冲突的DLL ReportingServicesWebUserInterface.DLL 的引用。这会将问题(从post发送错误)移至VS,而不是仅在SSRS服务器上。
添加新的ReportViewer()时,我会在VS中收到错误。
解决方案如下:给不需要的DLL一个别名(实际上没有在代码中使用它)。这将告诉编译器在使用WebForms时不使用此DLL。见图片
Report.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="MyWebApplication._Default" %>
<!DOCTYPE>
<html>
<head runat="server">
<title></title>
</head>
<body>
<div>
<div style="background-color:Red;width:100px;height:100px;">Hoi</div>
</div>
<form id="formID" runat="server">
test
</form>
<div>haha</div>
</body>
</html>
Report.aspx.cs
public partial class _Default : System.Web.UI.Page
{
ReportViewer ReportViewerRoot;
protected void Page_Load(object sender, EventArgs e)
{
AddRV();
}
public void AddRV()
{
ReportViewerRoot = new ReportViewer()
formID.Controls.Add(ReportViewerRoot);
SetReportViewer();
SetServerReport();
}
public void SetReportViewer()
{
ReportViewerRoot.ID = "ReportViewerRoot";
ReportViewerRoot.ProcessingMode = ProcessingMode.Remote;
}
private void SetServerReport()
{
ServerReport serverReport = ReportViewerRoot.ServerReport;
// Set the report server URL and report path
serverReport.ReportServerUrl = new Uri("http://localhost/reportserver");
serverReport.ReportPath = Request.QueryString["ItemPath"];
serverReport.Refresh();
}
}
答案 1 :(得分:1)
我解决了我的问题 从我的Web.Config中删除一个程序集 在我的案例中,版本10和11汇集在一起。 我从Config中删除了下面的代码
<add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
答案 2 :(得分:0)
不在这个答案中,但在下一个答案中我已经提出了令人满意的解决方案!! :)
这个解决方案确实有效,但在开发周期/可读性/可维护性方面并不令人满意。
我的Report.aspx文件只包含这一行:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Report.aspx.cs" Inherits="WebApplication._Default" %>
我的Report.aspx.cs确实包含如下代码:
HtmlGenericControl body = new HtmlGenericControl();
HtmlForm form = new HtmlForm();
ReportViewerRoot = new ReportViewer();
Controls.Add(body);
body.Controls.Add(form);
form.Controls.Add(ReportViewerRoot);
我的ReportManager / Web.config包含其他标记:
<!-- added enableSessionState -->
<pages validateRequest="false" enableSessionState="true" />
<httpModules>
<clear />
<!-- added -->
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
</httpModules>
<httpHandlers>
<!-- added -->
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</httpHandlers>
P.S:
我无法将report.aspx中的html代码与reportviewer(aspx或cs)结合起来。
我也不能使用<% AddRV(); %>
P.s.s.
Web.config帮助我解决了这些错误:
在远程模式下,Report Viewer控件需要启用会话状态或在中指定Report Server连接信息 配置文件。
报表查看器Web控件HTTP处理程序尚未在应用程序的web.config文件中注册。添加到system.web / httpHandlers web.config文件的一部分。
答案 3 :(得分:0)
转到
HKEY_CLASSES_ROOT \安装\装配\全球
搜索程序集并右键单击该行并删除完整行,然后选择“删除”。
答案 4 :(得分:0)
如果您有嵌套的应用程序,也可能出现这种情况。即。 App1内的App2。
App1的web.config可能会破坏App2的功能。确保他们没有引用同一个程序集的不同版本。
答案 5 :(得分:0)
在web.config中包含一个标签dependentAssembly以强制使用特定版本:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.ReportViewer.WebForms" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>