2012-02-24 110 views
4

我將VisualStudio2010中的ReportViewer 10.0.0.0應用到了我的Web應用程序中,我遇到了程序集問題。 服務器安裝了ReportViewer 8.0.0.0和9.0.0.0,我試圖避免安裝10.0.0.0版本。VS2010中ReportViewer程序集的問題

我在想如果可以在服務器上使用ReportViewer10 dll,即使沒有安裝它。我將dll的Build Action屬性設置爲Content,以便將它們複製到輸出bin文件夾。酒店Copy to Output DirectoryDo not copy

如下面的錯誤所示,我的項目從ReportViewer中找到兩個程序集,一個在GAC中,另一個在Temporary ASP.NET Files中。搜索,我也發現Temporary ASP.NET Files重新生成每個請求到服務器。

試圖解決我的問題,我從Temporary ASP.NET Files中刪除了dll,整個應用程序停止工作,顯示我的應用程序使用的是來自Temporary ASP.NET Files的dll,而不是來自GAC或bin文件夾。我想將我的應用程序設置爲使用bin文件夾或Temporary ASP.NET Files中的dll,因爲在這些位置dll的版本是正確的(10.0.0.0)。下面的錯誤顯示了來自GAC的ReportViewer9 dll與來自Temporary ASP.NET Files的ReportViewer10 dll之間的衝突。

我離開的DLL由我的項目引用,但我從bin文件夾中刪除:

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. 

CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both 
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\assembly\dl3\662a86a1\009c93d3_afeccc01\Microsoft.ReportViewer.WebForms.DLL' 

Line 180: 
Line 181: [System.Diagnostics.DebuggerNonUserCodeAttribute()] 
Line 182: private global::Microsoft.Reporting.WebForms.ReportViewer @__BuildControlReportViewer1() { 
Line 183: global::Microsoft.Reporting.WebForms.ReportViewer @__ctrl; 
Line 184: 

Source File: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\App_Web_default.aspx.cdcab7d2.dmkwuxko.0.cs 
Line: 182 

回答

6

我的問題是通過執行以下操作來解決。這樣DLL的停止被內部臨時ASP.NET文件夾重新生成,結束衝突:

CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both 
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\assembly\dl3\662a86a1\009c93d3_afeccc01\Microsoft.ReportViewer.WebForms.DLL' 

報表查看器保持不工作,它是如何預計(GAC只有版本8和DLL文件的9 )。然後,報表查看器10.0.0.0安裝在服務器上,而這一次新的錯誤顯示:

CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both 
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' 

我認爲這是奇怪的是,這場衝突已經不同版本的DLL之間發生的事情,而這一次的解決辦法是將以下標記添加到web.config文件:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727"> 
    <dependentAssembly> 
    <assemblyIdentity name="Microsoft.ReportViewer.WebForms" publicKeyToken="b03f5f7f11d50a3a"/> 
    <bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

完成。它的工作沒有任何衝突,可以導出報告。

我的問題解決了,但我仍然有一個疑問,我希望有人能幫我這一個:

爲什麼服務器已經從GAC_MSIL不同版本中的兩個DLL文件之間的衝突?服務器不應只查看我在項目中引用的版本並在Web.config中指定的版本? (10.0.0.0)

它與machine.config文件有任何關係嗎?