C#:类型'Microsoft.Reporting.WebForms.ReportViewer'存在于ReportingServicesWebUserInterface.dll和Microsoft.ReportViewer.WebForms.dll中

Eri*_*icG 11 asp.net reportviewer reporting-services

搜索了很多类似的帖子,解决方法,我决定自己发帖子.

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'
Run Code Online (Sandbox Code Playgroud)


更新:

大多数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>
Run Code Online (Sandbox Code Playgroud)

这需要引用MS.ReportViewer.WebForms.DLL

我的Project.csproj文件有这个:

<Reference Include="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
Run Code Online (Sandbox Code Playgroud)

我无法在C:\ WINDOWS中卸载任何DLL,因为它说它是其他应用程序所必需的.
WINDOWS \总成

我也尝试修改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>
Run Code Online (Sandbox Code Playgroud)

谢谢您的意见.我期待收到你的建议.

Eri*_*icG 10

满意的解决方案!

在aspx中插入ReportViewer对象时,会自动添加DLL引用(并指向GAC WebForms).我需要这个引用(无法成功手动引用GAC DLL),然后我删除了aspx中的ReportViewer.另外,我添加了对冲突的DLL ReportingServicesWebUserInterface.DLL的引用.这会将问题(从post发送的错误输出)移到VS,而不是仅在SSRS服务器上.

添加新的ReportViewer()时,我将在VS中收到错误.

解决方案如下:给不需要的DLL一个别名(实际上没有在代码中使用它).这将告诉编译器在使用WebForms时不使用此DLL.见图

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>
Run Code Online (Sandbox Code Playgroud)


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();
    }
}
Run Code Online (Sandbox Code Playgroud)


参考源:Extern别名演练


小智 5

我解决了从我的 Web.Config 中删除一个程序集的问题 在我的情况下,版本 10 和 11 一起出现了。我从配置中删除以下代码

 <add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
Run Code Online (Sandbox Code Playgroud)