14

類似の投稿や回避策をたくさん検索した結果、自分の投稿を作成することにしました。

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'


アップデート:

ほとんどの同様の投稿には、競合する 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 をアンインストールできませんでした。これは、他のアプリケーションに必要であると表示されていたためです。
Windows\アセンブリ

また、web.config を変更して、依存アセンブリをいくつか追加しようとしましたが、何が役立つかわかりません (上記のバージョンの違いに役立ちました)。

さらに、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>

ご意見ありがとうございます。あなたの提案をお待ちしております。

4

6 に答える 6

10

満足のいく解決策!

ReportViewer オブジェクトを aspx に挿入すると、DLL 参照が自動的に追加されます (そしてGAC WebFormsを指します)。この参照が必要なので (GAC DLL を手動で参照しても成功しませんでした)、aspx の ReportViewer を削除します。また、競合する DLL ReportingServicesWebUserInterface.DLLへの参照を追加します。これにより、問題 (投稿からのエラー出力) が、SSRS サーバーだけでなく、VS に移動します。

新しい ReportViewer() を追加すると、VS でエラーが発生します。

解決策は次のとおりです。必須ではない DLL にエイリアスを付けます (実際にはコードで使用しません)。これにより、WebForms の使用時にこの DLL が使用されないことがコンパイラーに通知されます。写真を見る

DLL 参照 + エイリアス

レポート.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();
    }
}


参照元: Extern エイリアスのチュートリアル

于 2012-07-05T13:16:36.373 に答える
5

問題を解決するには、Web.Config から 1 つのアセンブリを削除します。私の場合、バージョン 10 と 11 が一緒になります。構成によって以下のコードを削除します

 <add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
于 2016-07-01T05:46:38.377 に答える
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>


追伸:report.aspxのhtmlコードをreportviewer(aspxでもcsでもない)と組み合わせることはできません。また、次を使用してReportViewerをaspxに動的に追加することもできません。<% AddRV(); %>


Pss Web.configは、これらのエラーを解決するのに役立ちました。

リモートモードでは、レポートビューアコントロールでセッション状態を有効にするか、構成ファイルでレポートサーバー接続情報を指定する必要があります。


レポートビューアのWebコントロールHTTPハンドラーがアプリケーションのweb.configファイルに登録されていません。web.configファイルのsystem.web/httpHandlersセクションに追加します。

于 2012-07-03T08:02:04.273 に答える
-1

に行く

HKEY_CLASSES_ROOT\Installer\Assemblies\Global

アセンブリを検索し、それを右クリックして完全な行を削除し、削除を選択します。

于 2014-01-29T09:54:53.690 に答える