2012-06-27 18 views
9

Có tìm kiếm toàn bộ rất nhiều bài viết similair, cách giải quyết, tôi quyết định làm bài của riêng tôi.C#: Loại 'Microsoft.Reporting.WebForms.ReportViewer' tồn tại trong cả hai ReportingServicesWebUserInterface.dll và 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' 


Cập nhật:

bài viết similair Hầu hết có như một vấn đề mà họ 2 DLL mâu thuẫn có một phiên bản 8.0.0.0 và 9.0.0.0, hoặc lâu hơn. Hoặc chúng nằm trong thư mục TEMPORARY. Tôi không nghĩ rằng vấn đề của tôi có thể được giải quyết một cách tương tự với những bài viết như vậy.

Trên máy chủ ReportServer của chúng tôi, có Report.aspx, hiển thị báo cáo. Tôi muốn thay thế tập tin này với riêng tôi, để thay đổi cách bố trí trang, như vậy:

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

Điều này đòi hỏi một tham chiếu đến MS.ReportViewer.WebForms.DLL

tập tin của tôi Project.csproj có này:

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

Tôi không thể gỡ cài đặt bất kỳ tệp DLL nào trong C: \ WINDOWS, vì nó cho biết nó là bắt buộc đối với các ứng dụng khác.
WINDOWS\assembly

Tôi cũng đã cố gắng sửa đổi web.config, thêm một số dependAssemnly, nhưng không chắc chắn những gì sẽ hữu ích (Nó hữu ích cho sự khác biệt phiên bản được đề cập ở trên).

Hơn nữa tôi có những dòng này trong 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> 

Cảm ơn bạn đã nhập vào của bạn. Tôi rất mong nhận được đề xuất của bạn.

+0

bạn đã thử xóa một trong số chúng chưa? – Bastardo

+0

Nó không rõ ràng với tôi như thế nào bạn đến vấn đề này, và những giải pháp mà bạn đã thử mà không làm việc? Bất kỳ cơ hội nào bạn có thể xây dựng trên một số bước mà chúng tôi có thể tái tạo tình huống này? – Jeroen

+0

Bản cập nhật giúp, mặc dù tôi vẫn chưa hoàn toàn chắc chắn tình hình của bạn là gì. Có lẽ một [BindingRedirect] (http://msdn.microsoft.com/en-us/library/eftw1fys.aspx) để chuyển hướng cuộc gọi cho phiên bản 8 lên phiên bản 9 sẽ giúp bạn? – Jeroen

Trả lời

9

Giải pháp thỏa mãn!

Khi chèn đối tượng ReportViewer vào aspx, tham chiếu DLL được thêm tự động (và trỏ tới GAC WebForms). Tôi cần tham khảo này (Không thể thành công tham chiếu bằng tay đến GAC DLL), sau đó tôi loại bỏ ReportViewer trong aspx. Ngoài ra, tôi thêm tham chiếu đến DLL xung đột ReportingServicesWebUserInterface.DLL. Điều này di chuyển vấn đề (đầu ra lỗi từ bài) sang VS, thay vì chỉ trên máy chủ SSRS.

Khi thêm Trình báo cáo mới(), tôi sẽ gặp lỗi trong VS.

Giải pháp như sau: cung cấp cho DLL không yêu cầu một bí danh (không thực sự sử dụng nó trong mã). Điều này sẽ cho trình biên dịch biết rằng DLL này không được sử dụng khi sử dụng WebForms. Xem hình ảnh

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


nguồn tham khảo: Extern alias walkthrough

0

Không có câu trả lời này, nhưng trong câu trả lời tiếp theo tôi đã đưa ra giải pháp thỏa đáng !! :)


Giải pháp này cũng hoạt động nhưng không thỏa mãn liên quan đến chu trình phát triển/khả năng đọc/bảo trì.


tập tin Report.aspx My chứa gì, nhưng dòng này:

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


My Report.aspx.cs không chứa mã như:

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

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


ReportManager My/Web.config chứa các thẻ bổ sung là:

<!-- 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 .: Không đời nào tôi có thể kết hợp mã html trong report.aspx với trình báo cáo (không phải aspx hoặc cs). Tôi cũng không thể thêm ReportViewer động trong aspx bằng cách sử dụng <% AddRV(); %>


P.s.s. Các Web.config giúp tôi giải quyết các lỗi này:

Trong chế độ từ xa, kiểm soát Report Viewer đòi hỏi trạng thái phiên được kích hoạt hoặc Báo cáo thông tin kết nối máy chủ được xác định trong tập tin config.


Các Report Viewer kiểm soát Web HTTP Handler đã không được đăng ký trong file web.config của ứng dụng. Thêm vào phần system.web/httpHandlers của tệp web.config.

0

Tới

HKEY_CLASSES_ROOT \ Installer \ Assemblies \ toàn cầu

tìm kiếm để lắp ráp và xóa hàng hoàn thành click chuột phải trên đó và chọn delete.

0

Một lý do nữa có thể xảy ra là nếu bạn có các ứng dụng lồng nhau. I E. App2 bên trong App1.

Web.config của App1 có thể gây rối với App2. Đảm bảo rằng chúng không tham chiếu các phiên bản khác nhau của cùng một Assembly.

1

Tôi giải quyết vấn đề của mình Để xóa One Assembly khỏi Web của tôi.Config Trong trường hợp của tôi Phiên bản 10 và 11 được kết hợp với nhau. Tôi Xóa mã bên dưới khỏi Config

<add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/> 
Các vấn đề liên quan