たくさんのsimilairの投稿、回避策を検索して、自分で投稿することにしました。
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>
ご意見ありがとうございます。ご提案をお待ちしております。
満足のいくソリューション!
AspxにReportViewerオブジェクトを挿入すると、DLL参照が自動的に追加されます(およびGAC WebFormsを指します)) 。この参照が必要です(GAC DLLを手動で参照できませんでした)。次に、aspxのReportViewerを削除します。また、競合するDLLReportingServicesWebUserInterface.DLL。これにより、SSRSサーバー上だけでなく、問題(ポストからのエラー出力)がVSに移動します。
新しいReportViewer()を追加すると、VSでエラーが発生します。
解決策は以下のとおりです。none-requiredDLLエイリアスを(実際にコードで使用せずに)与えます。これは、このDLLがWebFormsを使用する場合は使用しないでください。
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();
}
}
参照ソース: 外部エイリアスウォークスルー
私の問題を解決します。私の場合、Web.Configから1つのアセンブリを削除するにはバージョン10と11が一緒になります。 Configから以下のコードを削除します
<add Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
この答えではなく、次の答えに満足のいく解決策を入れました!! :)
このソリューションも機能しますが、開発サイクル/可読性/保守性に関しては満足のいくものではありません。
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(); %>
を使用して、aspxにReportViewerを動的に追加することもできません。
追記Web.configは、これらのエラーの解決に役立ちました。
リモートモードでは、レポートビューアーコントロールではセッション状態を有効にするか、構成ファイルで指定されたレポートサーバー接続情報が必要です。
レポートビューアーWebコントロールHTTPハンドラーは、アプリケーションのweb.configファイルに登録されていません。web.configファイルのsystem.web/httpHandlersセクションに追加します。
に行く
HKEY_CLASSES_ROOT\Installer\Assemblies\Global
アセンブリを検索し、その行を右クリックして行全体を削除し、削除を選択します。
また、これが発生する理由は、ネストされたアプリケーションがある場合です。すなわち。 App1内のApp2。
App1のweb.configは、App2を混乱させる可能性があります。同じアセンブリの異なるバージョンを参照しないようにしてください。
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>