2012-06-27 14 views
9

Po przeszukaniu wielu similair posty, obejścia, zdecydowałem się zrobić własny post.C#: Typ "Microsoft.Reporting.WebForms.ReportViewer" istnieje zarówno w ReportingServicesWebUserInterface.dll i Microsoft.ReportViewer.WebForms.dll

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' 


Aktualizacja:

Większość similair posty mieć jako problem, że ich 2 sprzeczne DLL mają wersję 8.0.0.0 i 9.0.0.0, albo tak. Lub, że znajdują się w folderze TYMCZASOWYM. Nie sądzę, że mój problem można rozwiązać w podobny sposób z takimi postami.

Na naszym ReportServer istnieje Report.aspx, który renderuje raport. Chcę, aby zastąpić ten plik z własną rękę, aby zmodyfikować układ strony, tak jak poniżej:

<%@ 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> 

Wymaga to odniesienie do MS.ReportViewer.WebForms.DLL

plik My Project.csproj ma to:

<Reference Include="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> 

I nie był w stanie odinstalować DLL w C: \ WINDOWS, ponieważ stwierdzono, że był zobowiązany do innych zastosowań.
WINDOWS\assembly

Próbowałem również zmodyfikować web.config, dodając trochę dependentAssemnly, ale nie wiem, co byłoby przydatne (to był użyteczne dla różnic wersji wspomnianych powyżej).

Dalsze mam te linie w pliku 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> 

Dziękuję za wejście. Nie mogę się doczekać, aby otrzymać Twoje sugestie.

+0

Czy próbowałeś usunąć jedną z nich? – Bastardo

+0

Nie jest dla mnie jasne, w jaki sposób doszedłeś do tego problemu i jakie rozwiązania wypróbowałeś, które nie zadziałały? Czy jest szansa, że ​​rozwiążesz kilka kroków, które pozwolą nam odtworzyć tę sytuację? – Jeroen

+0

Aktualizacja pomaga, chociaż nadal nie jestem całkowicie pewien, jaka jest twoja sytuacja. Być może pomoże Ci [BindingRedirect] (http://msdn.microsoft.com/en-us/library/eftw1fys.aspx) przekierowywanie wywołań dla wersji 8 do wersji 9? – Jeroen

Odpowiedz

9

To satysfakcjonujące rozwiązanie!

Podczas wstawiania obiektu ReportViewer w aspx, odniesienie DLL jest automatycznie dodawane (i wskazuje na GAC WebForms). Potrzebuję tego odniesienia (nie udało się ręcznie odwoływać się do bibliotek DLL GAC), a następnie usunąć ReportViewer w aspx. Dodaję także odniesienie do konfliktu DLL ReportingServicesWebUserInterface.DLL. Powoduje to przeniesienie problemu (wyjście błędów z wiadomości) do VS, zamiast tylko na serwerze SSRS.

Podczas dodawania nowego ReportViewer() otrzymam błąd w VS.

Rozwiązanie jest następujące: nadaj niewymaganym DLL alias (bez faktycznego używania go w kodzie). To powie kompilatorowi, że ta biblioteka DLL nie ma być używana podczas korzystania z WebForms. Zobacz obraz

DLL references + alias

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(); 
    } 
} 


źródło odniesienia: Extern alias walkthrough

0

Nie w tej odpowiedzi, ale w następnej odpowiedzi przedstawiłem satysfakcjonujące rozwiązanie !! :)


To samo rozwiązanie działa, ale nie jest satysfakcjonujące w odniesieniu do cyklu rozwoju/czytelności/łatwości konserwacji.


Mój plik Report.aspx zawiera nic oprócz tej linii:

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="Report.aspx.cs" Inherits="WebApplication._Default" %> 


My Report.aspx.cs nie zawiera kodu, takich jak:

 HtmlGenericControl body = new HtmlGenericControl(); 
     HtmlForm form = new HtmlForm(); 
     ReportViewerRoot = new ReportViewer(); 

     Controls.Add(body); 
     body.Controls.Add(form); 
     form.Controls.Add(ReportViewerRoot); 


Moja ReportManager/Web.config zawiera dodatkowe znaczniki jako:

<!-- 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 .: W żaden sposób nie mogę połączyć kodu html w report.aspx z reportviewerem (ani aspx, ani cs). Nie mogę dodać ReportViewer dynamicznie w aspx przy użyciu <% AddRV(); %>


P.s.s. web.config pomógł mi rozwiązać te błędy:

W trybie zdalnego sterowania Report Viewer wymaga stanu sesji być włączony lub Zgłoś informacje o połączeniu serwera określonego w pliku konfiguracyjnym .


The Report Viewer sterowania Web HTTP Handler nie został zarejestrowany w pliku web.config aplikacji. Dodaj do sekcji system.web/httpHandlers pliku web.config.

0

Idź do

HKEY_CLASSES_ROOT \ Installer \ zwoje \ Globalnego

poszukiwaniu zespołu i usunąć cały wiersz, klikając prawym przyciskiem myszy i wybrać, które usunąć.

0

Powodem tego może być również zagnieżdżanie aplikacji. to znaczy. App2 w App1.

Aplikacja web.config App1 może zepsuć aplikację App2. Upewnij się, że nie odnoszą się one do różnych wersji tego samego zestawu.

1

mi rozwiązać mój problem Aby Wyjąć jeden zespół z mojego web.config w moim przypadku wersji 10 i 11 to przychodzi razem. I Usunąć poniższy kod z Config

<add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/> 
Powiązane problemy