2012-06-27 71 views
9

Después de buscar en una gran cantidad de publicaciones similares, soluciones, decidí hacer mi propia publicación.C#: existe el tipo 'Microsoft.Reporting.WebForms.ReportViewer' en ReportingServicesWebUserInterface.dll y 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' 


Actualización:

mensajes más similair tienen como un problema que sus 2 DLL en conflicto tienen una versión 8.0.0.0 y 9.0.0.0, más o menos. O que residen en la carpeta TEMPORAL. No creo que mi problema se pueda resolver de manera similar con tales publicaciones.

En nuestro ReportServer existe un Report.aspx, que rinde un informe. Quiero reemplazar este archivo con mi propio, para modificar el diseño de la página, así:

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

Esto requiere una referencia a MS.ReportViewer.WebForms.DLL

archivo Mi Project.csproj tiene esta:

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

yo no era capaz de desinstalar cualquier DLL en C: \ WINDOWS, porque dijo que era necesario para otras aplicaciones.
WINDOWS\assembly

También han tratado de modificar web.config, añadiendo un poco de dependentAssemnly, pero no está seguro de lo que sería útil (que fue útil para la versión diferencias mencionadas anteriormente).

Además tengo estas líneas en 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> 

Gracias por su entrada. Espero recibir sus sugerencias.

+0

intenté eliminar uno de ellos? – Bastardo

+0

No tengo claro cómo llegaste a este problema, y ​​¿qué soluciones has probado que no funcionaron? ¿Alguna posibilidad de que pueda explicar algunos pasos con los que podemos reproducir esta situación? – Jeroen

+0

La actualización ayuda, aunque aún no estoy del todo seguro de cuál es su situación. Quizás un [BindingRedirect] (http://msdn.microsoft.com/en-us/library/eftw1fys.aspx) para redirigir las llamadas de la versión 8 a la versión 9 te ayudará? – Jeroen

Respuesta

9

¡La solución satisfactoria!

Al insertar un objeto ReportViewer en el aspx, la referencia DLL se agrega automáticamente (y apunta a GAC WebForms). Necesito esta referencia (no pude tener éxito al hacer referencia manual a las DLL de GAC), luego eliminé ReportViewer en el aspx. Además, agrego la referencia a la DLL conflictiva ReportingServicesWebUserInterface.DLL. Esto mueve el problema (salida de error de la publicación) a VS, en lugar de solo en el servidor SSRS.

Al agregar un nuevo ReportViewer() obtendré el error en VS.

La solución es la siguiente: proporcione un alias a la DLL no requerida (sin utilizarla realmente en el código). Esto le indicará al compilador que esta DLL no se debe usar cuando se usa WebForms. Ver imagen

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


Fuente de referencia: Extern alias walkthrough

0

No en esta respuesta, pero en la siguiente respuesta he puesto la solución satisfactoria !! :)


Esta misma solución también funciona, pero no satisface el ciclo de desarrollo/legibilidad/mantenibilidad.


Mi archivo Report.aspx contiene nada más que esta línea:

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


Mi Report.aspx.cs contiene código como:

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

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


Mi ReportManager/Web.config contiene etiquetas adicionales como:

<!-- 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 .: De ninguna manera soy capaz de combinar el código html en report.aspx con un reportviewer (ni aspx o cs). Tampoco puedo añadir el ReportViewer de forma dinámica en el aspx utilizando <% AddRV(); %>


P.s.s.El Web.config me ayudó a resolver estos errores:

En el modo remoto, el control de visor requiere ser activado o notificaciones de información de conexión del servidor especificado en el archivo de configuración estado de la sesión.


El Visor de informes de control Web HTTP Handler no ha sido registrada en el archivo web.config de la aplicación. Agregue a la sección system.web/httpHandlers del archivo web.config.

0

Ir a

HKEY_CLASSES_ROOT \ Installer \ Assemblies \ global

búsqueda para el montaje y eliminar fila completa haciendo clic derecho sobre eso y elegir eliminar.

0

También una razón por la que esto puede ocurrir es si tiene aplicaciones anidadas. es decir. App2 dentro de App1.

El web.config de la aplicación 1 puede interferir con App2. Asegúrese de que no hagan referencia a versiones diferentes de la misma Asamblea.

1

Resuelvo mi problema Para eliminar el One Assembly de mi Web.Config En mi caso, las versiones 10 y 11 se unen. Quite el código siguiente de Config

<add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/> 
Cuestiones relacionadas