[原]Asp.net替換不同版本的Dll文件碰到的問題以及解決辦法.

情景還原: 今天一個朋友說網站不能上傳圖片,我檢查后發現一直卡住在上傳頁面,一直滾動,是個Fckeditor控件2.6.3的.

???????????? 經過google以后得到的結論是圖片上傳成功,但是沒有返回結果,在服務器上可以看到上傳的圖片. 說明是上傳控件有問題,程序不能返回結果.

???????????? 再google以后發現有人已經修改好了這個文件,FredCK.FCKeditorV2.dll,大喜,遂替換之,錯誤隨之而來.

錯誤原因:原來舊版本的dll文件與新版本的dll文件版本號不一樣,publickeytoken也可能不一樣,導致源程序在發布的時候,固定了這個版本號與publickeytoken.

解決辦法: 原版的程序沒有源代碼,所以不可能添加新的dll引用,再重新生成網站,所以只能替換. 發布的bin里面App_Web_0uxqio0i.dll這個文件引用了FredCK.FCKeditorV2.dll

???????????? 所以只需要修改App_Web_0uxqio0i.dll里面引用的FredCK.FCKeditorV2.dll的版本號以及publickeytoken就可以了.

原理是利用ildasm反編譯dll,再用ilasm編譯成dll再替換就可以了. 編譯了以后修改其中的版本號以及publickeytoken.????????????

引用:http://hi.baidu.com/zzyjg/blog/item/e8c0fb11ad932e19b9127be7.html

????????????

上午在打開一個Asp.net網頁時出現了這樣的錯誤信息:
找到的名為“Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1”的程序集清單定義與程序集引用不匹配
其中Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1是我們程序中用到的第三方控件。我自己也是第一次遇到這樣的問題,咋一看估計是版本問題。但也不知道真正原因是什么以及該如何解決。上午查找了相應的資料將該“報錯”成功解決。
既然是“程序集清單”和“程序集引用”不匹配。那讓我們先來看看什么是“程序集清單”。
什么是程序集清單(Assembly Manifest)?
我們知道,在.net中。程序是以程序集為單位進行打包的,通常一個.exe文件或一個.dll文件就是一個程序集。程序集一般包含了以下幾個部分:
1,程序集清單(或者叫程序集元數據);
2,類型元數據;
3,MSIL代碼;
4,資源(可選項).
如此說來,一般情況下一個.exe或.dll都會包含這此內容。
具體請參考:http://msdn2.microsoft.com/zh-cn/library/zst29sk2(VS.80).aspx
在程序集中,程序集清單(manifest)是比較重要的,簡單地講它包含了一個程序集需要引用的外部分文件及程序集所包含的內容。其實也就是微軟說的“自我說明”。我們可以通過Visual Studio2003自帶的ILDASM工具查看該清單:
1,打開ILDASM,一般位于:VS2003安裝目錄\SDK\v1.1\Bin\目錄下。
2,打開ILDASM,后選擇文件->打開,將想要查看的程序集加進來。
3,雙擊“MANIFEST”;
打開后會看到如下內容:
11680_071015152938.gif
上圖的MANIFEST就是程序清單,像紅線部分標出的是該程序集需要引用到外部文件Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1,同時也標識了版本號和密鑰。
至此,我們知道是什么是程序集清單以及怎么樣查看一個程序集清單了。下面我們再看看什么是程序集引用。
什么是程序集的引用?
在VS2003下編程的朋友們都知道,當我們用第三方控件,或是別人寫的DLL時,我所要做的就是將其引用進來。引用一個程序集的動作分為兩步:
首先,在項目中將需要的引用的程序集“添加至”引用中。
其次,在源文件件引入(using namespace)別人的命名空間;
如下:
11680_071015154442.gif
如此將其引用進來以后,我們就可以使用該第三方控件提供的類、方法、資源等功能了。比如我們將“System.Data.SqlClient”引入以后,我們就可以通過其提供的類進行數據庫的連接及操作了。
現在知道什么是“程序集清單”了,知道什么是“程序集引用”。問題也相對明了了。程序引用中的第三方控件的版本號(我這邊是路徑導致的)和最終生成的程序集清單所需的版本號并不相符。
.net的CLR在執行一個程序時(如.exe)時或使用一個.dll時,他會首先查看其程序集(.exe或.dll)的程序集清單,找到運行該程序所引用的程序集并加載。.net會按一定的路徑搜索,加載.若加載的版本和程序清單中的不一致時就會出現類似"程序集清單定義與程序集引用不匹配"報錯。
利用dll轉存的.il文件,用記事本修改文件頭部中的版本號等資料.保存.
版本號直接右鍵屬性就可以看到了,publickeytoken需要用到命令. 參考http://blog.8384.org/post-470.html

使用命令行工具SDK Command Prompt,鍵入:SN -T C:\*****.dll

就會顯示出該dll具體的PublicKeyToken數值。

如果該程序集沒有強命名,則不會有PublicKeyToken數值。

將一個程序集強命名的方法是:

用SN -k C:\***.snk命令生成***.snk文件,將該snk文件加載到項目中。在項目上右鍵屬性,選擇Signing選項卡,鉤選中“Sign the assembly”,再在下拉列表中選擇剛才生成的***.snk,重新編譯程序集。

此后,該程序集就被強命名了,它的PublicKeyToken就有相應數值了。

注意要用大寫的-T,不能用小寫的。

公鑰標記由應用程序簽名時所用公鑰的SHA-1哈希代碼的最后8個字節表示

再用ilasm生成.

下面的命令對 MSIL 文件 myTestFile.il 進行匯編并產生可執行文件 myTestFile.exe.

other
復制
ilasm myTestFile

下面的命令對 MSIL 文件 myTestFile.il 進行匯編并產生 .dll 文件 myTestFile.dll

other
復制
ilasm myTestFile /dll 

下面的命令對 MSIL 文件 myTestFile.il 進行匯編并產生 .dll 文件 myNewTestFile.dll

other
復制
ilasm myTestFile /dll /output:myNewTestFile.dll
這樣一個經過修改的dll文件生成了,再次替換文件.系統成功運行.已經可以識別新的版本的dll文件,并進行調用
上傳圖片成功.
ilasm 與 ildasm 點這里下載(打包在一起的):
http://files.cnblogs.com/cyrix/ildasm.rar

轉載于:https://www.cnblogs.com/cyrix/articles/2208630.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/380157.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/380157.shtml
英文地址,請注明出處:http://en.pswp.cn/news/380157.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

疊筐

Problem Description 需要的時候,就把一個個大小差一圈的筐疊上去,使得從上往下看時,邊筐花色交錯。這個工作現在要讓計算機來完成,得看你的了。 Input 輸入是一個個的三元組,分別是,外筐尺寸n&#xff…

“Visual Studio.net已檢測到指定的Web服務器運行的不是Asp.net1.1版。您將無法運行Asp.net Web應用程序或服務”問題的解決方案...

解決方案一: 1.確定有安裝.net framework 1.1,可以查看目錄,c:\winnt\microsoft.net\framework重啟IIS,重啟計算機(常規糾錯方法) 2.如果你的Web服務器使用了固定IP:確定你的“Internet信息服務…

【桶】220.存在重復元素 III 【LeetCode】

220.存在重復元素 III 【LeetCode】 給你一個整數數組 nums 和兩個整數 k 和 t。請你判斷是否存在 兩個不同下標i和j&#xff0c;使得 abs(nums[i] - nums[j]) < t&#xff0c;同時又滿足 abs(i - j) < k。 如果存在則返回 true&#xff0c;不存在返回 false。 示例 1…

遠控免殺專題12--Green-Hat-Suite免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

英語基礎語法(八)-時態

英語中&#xff0c;動詞時態的用法是尤其復雜和富于變化的。經常通過動詞詞尾、組動詞等的變化表明動作發生時間的先后順序&#xff0c;即時態。總的來說&#xff0c;英語中的動詞時態分為 三個基本類型&#xff1a; 現在、過去和將來。動詞時態的變化常常伴隨著相應的表示時間…

Java PushbackInputStream markSupported()方法與示例

PushbackInputStream類markSupported()方法 (PushbackInputStream Class markSupported() method) markSupported() method is available in java.io package. markSupported()方法在java.io包中可用。 markSupported() method is used to check whether this stream supports …

面型對象 (接口與類的區別)

public class Demo4_Interface {public static void main(String[] args) {某女星 clown new 某女星();clown.潛規則();clown.關系();} }/*親爹只有一個&#xff0c;是單繼承;干爹可以有很多個&#xff0c;是多實現;*/ interface 某干爹{public void 關系();public void 潛規…

遠控免殺專題 13----zirikatu免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

UML 的九種模型圖

1. UML的模型圖 UML 的模型圖能夠將被建模的系統的某一個方面的某一部分以圖形的方式表示出來&#xff0c;不同的視圖通過將多個不同的模型圖有機組合在一起就能夠描述系統模型的某方面的特征。UML的模型圖是有模型元素構成的&#xff0c;模型元素以圖標的形式直觀形象的表達…

【莫隊】區間眾數(Codeforces Round #716 (Div. 2) D)

D. Cut and Stick &#xff08;賽后補題&#xff09;借本題學習莫隊算法以及區間眾數的求法 題意&#xff1a;對于整型數組&#xff0c;每次詢問[L,R][L,R][L,R]區間問最少分為多少個子序列&#xff0c;使得每個子序列的眾數xxx的個數cntxcnt_xcntx?不大于 ?len2?\left \l…

如何正確使用SqlConnection

以前曾見過有人這樣寫代碼&#xff1a; public class Service1 : IService1{private SqlConnection conn new SqlConnection();public void Method1(){//do something with conn;}public void Method2(){//do something with conn;}public void Method3(){//do something with…

關系代數基本運算_關系代數的基本和附加運算

關系代數基本運算Definition 定義 Every DBMS must define a query language to enable users to access the data which is stored in the database. Relational Algebra is a procedural query language. It is used to query the database tables in order to access data…

遠控免殺專題 14 ---AVIator

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

面型對象 (包package)

面向對象(package關鍵字的概述及作用) 為什么要有包 將字節碼(.class)進行分類存放 包其實就是文件夾 代碼如下&#xff1a; package beyond.hjj;//在當前運行目錄下創建一個子目錄結構beyond\hjj&#xff0c;在子目錄下存放已經編譯成字節碼文件的clown.class類。 class c…

【Web開發】級聯查詢(Ajax/ jQuery/ Servlet)

實現級聯查詢 共有兩個下拉框&#xff0c;第一級為學院&#xff0c;第二級為學院開設的科目。 實現的功能為&#xff1a;當改變學院的選擇&#xff0c;第二級下拉框需變為對應學院開設的科目內容。 結果預覽&#xff1a; jsp頁面 <% page contentType"text/html;…

asp.net treeView綁定

這個東西不是什么復雜的東西&#xff0c; 幫著小兄弟寫個Demo, 實現個Binding public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); } } priv…

關于TOmcat的一些小小的知識

web.xml中的url-pattern和form 表單中的action是相同的。form 表單中的action聲明的并不是servlet的名字 例&#xff1a; <servlet> <servlet-name>welcome</servlet-name> <servlet-class>WelcomeYou</servlet-class> </servlet> <ser…

Java文件類字符串getAbsolutePath()方法(帶示例)

文件類字符串getAbsolutePath() (File Class String getAbsolutePath()) This method is available in package java.io.File.getAbsolutePath(). 軟件包java.io.File.getAbsolutePath()中提供了此方法。 This method is used to return the absolute path of the file object …

遠控免殺專題(15)-DKMC免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

面向對象(靜態成員內部類的調用)

class beyond{public static void main(String []args){//外部類名.內部類名 對象名 外部類名.內部類對象(new 內部類名)/*Outer.Inner yy Outer.new Inner(); 類里面有個非靜態方法&#xff0c;需要new創建Inner對象;正常的形式是這樣的&#xff0c;但是我們習慣將new放在前…