2012-06-27 23 views
9

सिमिलियर पोस्ट, वर्कअराउंड्स की पूरी खोज करने के बाद, मैंने अपना खुद का पोस्ट बनाने का फैसला किया।सी #: प्रकार 'माइक्रोसॉफ्ट। रिपोर्टिंग। वेबफॉर्म। रिपोर्टपोर्ट' दोनों रिपोर्टिंग सर्विसेजवेब्यूसर इंटरफेस.dll और माइक्रोसॉफ्ट में मौजूद है। ReeportViewer.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' 


अद्यतन:

अधिकांश similair पदों एक समस्या यह है कि उनके 2 परस्पर विरोधी DLLs एक संस्करण 8.0.0.0 और 9.0.0.0, या तो है के रूप में की है। या वे टेम्पलेट फ़ोल्डर में रहते हैं। मुझे नहीं लगता कि मेरी समस्या को इस तरह के पदों के साथ सुलझाया जा सकता है।

हमारी रिपोर्ट सर्वर पर एक रिपोर्ट.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> 

यह

मेरे Project.csproj फ़ाइल यह है MS.ReportViewer.WebForms.DLL

के लिए एक संदर्भ की आवश्यकता है: मैं बहुत की तरह, पेज लेआउट को संशोधित करने के अपने खुद के साथ इस फ़ाइल को बदलने के, हैं: क्योंकि यह कहा कि यह अन्य अनुप्रयोगों के लिए आवश्यक था, \ WINDOWS:

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

मैं सी में किसी भी DLLs की स्थापना रद्द करने में सक्षम नहीं था।
WINDOWS\assembly

मैं भी web.config को संशोधित करने की कोशिश की है, कुछ dependentAssemnly जोड़ने, लेकिन यकीन नहीं उपयोगी होगा क्या (यह संस्करण मतभेद ऊपर उल्लेख किया है के लिए उपयोगी था)।

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

अपने इनपुट के लिए धन्यवाद:

इसके अलावा मैं web.config में इन पंक्तियों की है। मैं आपके सुझाव प्राप्त करने की उम्मीद कर रहा हूं।

+0

क्या आपने उनमें से किसी एक को हटाने का प्रयास किया था? – Bastardo

+0

यह मेरे लिए अस्पष्ट है कि आप इस समस्या पर कैसे पहुंचे, और आपने किस समाधान का प्रयास किया है जो काम नहीं करता है? किसी भी मौके पर आप कुछ कदमों पर विस्तार कर सकते हैं जिसके साथ हम इस स्थिति को पुन: उत्पन्न कर सकते हैं? – Jeroen

+0

अद्यतन मदद करता है, हालांकि मैं अभी भी पूरी तरह से सुनिश्चित नहीं हूं कि आपकी स्थिति क्या है। शायद एक [बाइंडिंग रेडियोधर्मी] (http://msdn.microsoft.com/en-us/library/eftw1fys.aspx) संस्करण 8 के लिए संस्करण 9 के लिए कॉल रीडायरेक्ट करने में आपकी मदद करेगा? – Jeroen

उत्तर

9

संतोषजनक समाधान!

एएसपीएक्स में एक रिपोर्ट व्यूअर ऑब्जेक्ट डालने पर, डीएलएल संदर्भ स्वचालित रूप से जोड़ा जाता है (और जीएसी वेबफॉर्म पर इंगित करता है)। मुझे इस संदर्भ की आवश्यकता है (मैन्युअल रूप से जीएसी डीएलएल को संदर्भित करने में सफल नहीं हो सका), फिर मैं रिपोर्ट वीवर को एएसपीएक्स में हटा देता हूं। इसके अलावा, मैं विरोधाभासी DLL रिपोर्टिंग सर्विसेज WebUserInterface.DLL का संदर्भ जोड़ता हूं। यह केवल एसएसआरएस सर्वर पर स्थिरता में समस्या (पोस्ट से त्रुटि आउटपुट) को वीएस तक ले जाता है।

कोई नया ReportViewer() जोड़ते समय मुझे VS में त्रुटि मिल जाएगी।

समाधान इस प्रकार है: किसी भी आवश्यक डीएलएल को उपनाम (वास्तव में कोड में इसका उपयोग किए बिना) दें। यह संकलक को बताएगा कि वेबफॉर्म का उपयोग करते समय इस DLL का उपयोग नहीं किया जाना चाहिए। तस्वीर देखें

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


संदर्भ स्रोत: Extern alias walkthrough

0

इस उत्तर में नहीं, लेकिन अगले जवाब में मैंने संतोषजनक समाधान रखा है !! :)


यह बहुत समाधान भी काम करता है लेकिन विकास चक्र/पठनीयता/रख-रखाव के विषय में संतोषजनक नहीं है।

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

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


मेरे ReportManager /:

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


मेरे Report.aspx.cs कोड जैसे शामिल करता है:


मेरे Report.aspx फ़ाइल लेकिन इस लाइन कुछ भी नहीं है 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 में एचटीएमएल कोड को एक रिपोर्टव्यूअर (न तो एएसपीएक्स या सीएस) के साथ जोड़ सकता हूं। न ही मैं <% AddRV(); %>


P.s.s. का उपयोग करके aspx में गतिशील रूप से ReportViewer जोड़ सकते हैं Web.config मुझे इन त्रुटियों का समाधान में मदद की:

दूरस्थ मोड में, रिपोर्ट व्यूअर नियंत्रण सत्र स्थिति सक्षम या config फ़ाइल में निर्दिष्ट सर्वर कनेक्शन जानकारी रिपोर्ट प्राप्त हो।


रिपोर्ट व्यूअर वेब नियंत्रण HTTP हैंडलर आवेदन के web.config फ़ाइल में पंजीकृत नहीं किया गया है। Web.config फ़ाइल के system.web/httpHandlers अनुभाग में जोड़ें।

0

को विधानसभा के लिए

HKEY_CLASSES_ROOT \ इंस्टालर \ विधानसभाओं \ वैश्विक

खोज जाओ और उस पर राइट क्लिक करके पूरा पंक्ति को हटा और हटाने के लिए चुनते हैं।

0

यह भी एक कारण हो सकता है यदि आपके पास नेस्टेड अनुप्रयोग हैं। अर्थात। App1 के अंदर App2।

ऐप 1 का web.config ऐप 2 के साथ गड़बड़ हो सकता है। सुनिश्चित करें कि वे एक ही असेंबली के विभिन्न संस्करणों का संदर्भ नहीं देते हैं।

1

मैं अपनी समस्या को हल करता हूं मेरे वेब से एक असेंबली निकालने के लिए। कॉनफिग मेरा केस संस्करण 10 और 11 में एक साथ आता है। मैं नीचे दिए गए कोड को कॉन्फ़िगर करें

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