2013-02-01 28 views
3

我們的ASP.NET Web應用程序(使用Telerik RadGrid 2.0.2.0)需要針對Windows 7兼容性進行更新。問題是導出Excel文件的現有功能不會生成與Office 2007兼容的Excel文件,這是我們新的Windows 7常用應用程序集的一部分。運行時錯誤:VersionOne.dll和VersionTwo.dll中都存在類型X

問題是這行代碼:

ExportXLS.Telerik.WebControls.RadGrid RadGrid1 = new 
     ExportXLS.Telerik.WebControls.RadGrid(); 
RadGrid1.MasterTableView.ExportToExcel(TableName, true, false); 

我們發現,還有另外一個DLL,RadGrid.Net2版本4.5.0.0,其中包括一個「ExportToExcel2007」的方法,是不是在2.0中可用dll的版本。這種方法確實產生可以用Excel打開一個有效的Excel文件2007

Telerik.WebControls.RadGrid RadGrid1 = new Telerik.WebControls.RadGrid(); 
RadGrid1.MasterTableView.ExportToExcel2007(TableName, true, false); 

的問題是,似乎是兩個DLL並切換到使用新的DLL似乎並不輕鬆之間激烈的區別。我們的預期解決方案是在應用程序中引用這兩個DLL,但僅在創建2007兼容Excel文件時遇到問題的屏幕中使用較新的一個。

使用下面的文章爲指導,

http://blogs.msdn.com/b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx

我們做了如下的微小變化:

  1. 添加在web項目 「RadGrid.Net2.dll」 的引用並將此參考的別名屬性調整爲「導出XLS

  2. 將此添加到ExportExcel.aspx.cs代碼隱藏頁的頂部:

    extern alias ExportXLS;

    ExportXLS .Telerik.WebControls.RadGrid RadGrid1 =新ExportXLS .Telerik:

  3. 然後,使用新的DLL通過參照radgrid.net2.dll的合格參考實例化的radgrid控件。 WebControls.RadGrid();

  4. 修改了ExportToExcel方法使用2007對應方法:

    RadGrid1.MasterTableView。 ExportToExcel2007(TableName,true,false);

這解決了問題與ExportExcel.aspx頁面和屏幕現可生產Excel 2007中兼容Excel電子表格,但是,我們感到驚訝的是這一變化打破了在使用radgrid控件的應用程序的其他頁面。這是錯誤:

c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7ff38b9a\2680aee3\App_Web_systemmapsearch.ascx.a97e7c59.tlmhafnf.0.cs(251): error CS0433: 

The type 'Telerik.WebControls.GridRowIndicatorColumn' 
exists in both 
    'c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 
    Files\root\7ff38b9a\2680aee3\assembly\dl3\cd8ec314\002177c0_d2e8cb01\RadGrid.DLL' 
and 
    'c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7ff38b9a\2680aee3\assembly\dl3\428a2b2d\002177c0_d2e8cb01\RadGrid.Net2.DLL' 

我的期望是,其他網頁將繼續使用舊的不合格版本2.0.2.0的RadGrid.dll,並會繼續工作,但這種情況並非如此。

下面是一些來自用戶控件的代碼後面的代碼,SystemMapSearch.ascx,即加載失敗:

<%@ Register TagPrefix="radG" Namespace="Telerik.WebControls" Assembly="RadGrid" %> 
<radg:radgrid id="RadGrid1" cssclass="RadGrid" runat="server" allowpaging="True" allowsorting="True" gridlines="none" 
     pagesize="20" width="100%" borderwidth="0" AutoGenerateColumns="False"> 

我試圖改變namespace指令包括全局命名空間,但這導致一個無效的參考:

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid" %> 

爲什麼改變ExportExcel.aspx頁面攻破對方的網頁和我有什麼做的,解決這個問題?

回答

3

嗨,也許這東西可以幫助你解決你的問題。

  • 出於某種原因,你的應用程序加載兩個不同版本的Telerik.Web.UI組裝。這可能是因爲你在GAC中都有Telerik.Web.UI程序集。

    修復此問題您可以通過您的項目並確保無論您在何處引用Telerik.Web.UI程序集(在web.config或ASPX頁面中),都使用完全限定的組件名稱。例如:

    「Telerik.Web.UI,版本= 2009.2.701.20,文化=中性公鑰= 121fae78165ba3d4」

    ,而不是僅僅 「Telerik.Web.UI」。完全限定的名稱包含版本號,所以ASP.NET不會混淆到同時加載兩個程序集。 參考:Compile Error Message: The type 'Telerik.Web.UI.RadFileExplorer' exists in both..

  • 升級現有Telerik的應用程序的RadControls(包括RadChart),以供的RadControls ASP.NET AJAX您可能會收到以下錯誤:

    錯誤1型「Telerik.Charting。存在於'c:\ WINDOWS \ assembly \ GAC_MSIL \ Telerik.Charting ... \ Telerik.Charting.dll'和'c:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files .. \ RadChart.Net2.DLL'


    此錯誤的原因是因爲RadChart(3.x和更高版本)和RadControls for ASP.NET AJAX Chart使用共享代碼。他的共享代碼是Telerik.Charting的形式。 dll程序集,它在RadChart.Net2.dll中進行了ILMerged以實現向後兼容性,並針對RadControls for ASP.NET AJAX單獨發佈。 只要您嘗試引用RadChart.Net2.dll和Telerik.Charting.dll,就會顯示錯誤。

    有解決這個問題有兩種方法:

    1. 如果要遷移項目中使用了的RadControls ASP.NET AJAX最初可能會要刪除的參考Telerik.Charting.dll從您的Web.config文件中。在這種情況下,您將使用舊的ASP.NET圖表,並且不需要該套件附帶的Telerik.Charting.dll。對於除Chart以外的ASP.NET AJAX控件的操作,Telerik.Charting.dll不是必需的。

    2. 如果您已經使用RadChart用於ASP.NET AJAX,那麼你將需要刪除提及RadChart.Net2.dll並繼續使用Telerik.Charting.dll

    請心目中RadChart for ASP.NET AJAX和RadChart 4.x具有99%相同的功能。決定選擇哪一個取決於您的個人喜好。最顯着的區別是程序集名稱和RadChart for ASP.NET AJAX使用HttpHandler顯示圖像以及RadChart 4.x仍然使用RadControls \ Image.aspx以實現向後兼容性的事實。 參考:Telerik.Charting. in both Telerik.Charting.dll and RadChart.Net2.dll

  • 這是一個一般性錯誤,通常意味着在你的引用程序,並使用與實際的不匹配。最有可能的是你有並行報告安裝並且有不匹配的引用。請使用升級嚮導升級包含Telerik報告的項目並重建它們。如果添加了手動引用(即Copy Local = True),則從\ bin文件夾中刪除所有程序集,然後在項目中重新添加適當的引用並在此之後重新生成項目。如果問題仍然存在,請確保您已在每個參考中指定完整裝配限定名稱。例如:

    <%@註冊的組件= 「Telerik.ReportViewer.WebForms,版本= 5.0.11.328,文化=中性公鑰= a9d7983dfcc261be」 命名空間= 「Telerik.ReportViewer.WebForms」 的TagPrefix = 「Telerik的」 % >

    ,而不是:

    < %@註冊的TagPrefix = 「Telerik的」 裝配= 「Telerik.ReportViewer.WebForms」 命名空間= 「Telerik.ReportViewer.WebForms」 %>
    參考:Telerik.Reporting.Report exists in both ....

  • 將batch =「false」屬性添加到web.config文件的「編譯」元素中。

    由於ASP.NET 2.0使用應用程序引用和應用程序的文件夾結構來編譯應用程序的方式發生此問題。如果應用程序的web.config文件中的元素的批處理屬性設置爲true,則ASP.NET 2.0會將應用程序中的每個文件夾編譯爲單獨的程序集。
    參考:ASP.Net error: 「The type 'foo' exists in both 」temp1.dll「 and 」temp2.dll

+0

我在看到您的帖子之前發現了我的問題,但您的詳細回答看起來不錯。謝謝。 – ChadD

2

我遇到了一個類似的問題,我曾經參與過一箇舊項目。

我知道刪除臨時文件解決了問題,因爲我們能夠編譯和部署Web應用程序(每個功能都按預期工作)。

我沒有深入瞭解爲什麼會出現這種錯誤。

+0

我刪除了我的%Temp%文件夾中的所有文件,清理了我的解決方案,重新編譯並重新運行。我得到了同樣的錯誤。不知道我是否正確解釋了您提出的解決方案... – ChadD

+0

該解決方案確實刪除了兩個: 「c:\ WINNT \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ 7ff38b9a \ 2680aee3 \「和」c:\ WINNT \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ 7ff38b9a \「目錄,然後重新編譯。 太糟糕了,它沒有按預期工作。 – Morv

+0

啊,我實際上最初從C:\ DOCUME〜1 \ MyID \ LOCALS〜1 \ Temp(這相當於我的系統的環境變量%Temp%)中刪除了這些文件。在看到上面的註釋之後,我刪除了臨時的ASP.NET文件夾,但仍然沒有運氣。謝謝。 – ChadD

1

我從來沒有真正做到這一點,但我相信你可以爲新的Telerik dll編寫一個包裝DLL,僅公開所需的功能,然後在你的項目中引用包裝器。

+0

是的,我想到了,但這是一個混亂。 – ChadD

+0

我想* * [笑],但想知道它是否會比將所有內容轉換爲新的Rad dll更少。我一直很喜歡Telerik,直到需要改變版本。 – KennyZ

1

我改變了大會所有的 」radgrid控件「

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid" %> 

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid.Net2" %> 

我認爲,直到我做了這個變化,這是仍然在bin文件夾中拾取舊的radgrid.dll,即使我不再提及舊的radgri d.dll。

在任何情況下,當我不小心改變了Assembly屬性的所有出現位置,甚至從bin文件夾中刪除了舊的未使用的dll時,它就起作用了。

相關問題