2016-09-19 19 views
0

加載類型所以我搜索了很多關於同一問題的線程,但我似乎無法工作。但我知道確切的問題。添加委託之後無法從程序集C#

所以這是一個

SellControl.DLL

,我添加了一個委託和事件,你可以在這裏看到。

public delegate void CashCreditStatusDel(string cardNo, decimal amount, string extraText, string token, string docNr, bool status); 


public static event CashCreditStatusDel SwitchOperationStatus; 

現在我需要另一個類內的事件,以便引用SellControl.dll並運行它。 Eeverything在我的電腦正常工作,無暇雖然當我把它的測試機上,我們的測試人員使用 - 它刪除一個錯誤

[8點42分46秒]致命錯誤(內核):內部異常:System.TypeLoadException: 無法從程序集 'SellControl,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型'SellControls.CashCreditStatusDel'。 在Plugins.CardCreditOperation.Display()

所以我跟蹤一個錯誤顯示()方法

SellControl.SwitchOperationStatus += InvokeData; 

我訂閱我的方法InvokeData到方法的SellControl裏面,如果我刪除此行 - 代碼不會崩潰,但我不會訂閱活動。

正如我在測試機器中可以理解的那樣,GAC有舊版本的SellControl.dll並使用它而不是我的?我現在掙扎了2個小時。

+0

由於該程序集並非強名稱,因此它不能在GAC中。你確定程序集是應用程序可以加載它的地方嗎?它是什麼應用程序,桌面,網絡?你有沒有嘗試啓用融合?你有一個項目引用程序集,或者你是否手動複製DLL?如果是後者,請確保程序集是最新的,並且位於應用程序可執行文件的旁邊。 – Luaan

+0

您是否重新編譯測試機器上的代碼?在構建和測試機器上,網絡庫的版本必須完全相同,才能簡單複製可執行文件。網絡庫使用Windows DLL和Windows DLL的版本可能不同。解決方法是使用生成菜單中的發佈選項來生成安裝包,如商業購買的軟件。發佈將在根文件夾中使用setup.exe創建文件夾。您需要安裝setup.exe,就像商業軟件一樣,它將在測試機器上更新dll,或者在測試機器上重新編譯軟件。 – jdweng

+0

這是一個3.5 .NET的WPF應用程序。我在我自己的機器上編譯所有東西,然後使用過去的程序員創建的.bat將所有內容從發佈文件夾移動到「代碼結構化文件夾」中。一切都很好,直到現在。 – Wkjjjj

回答

0

好吧,我做了什麼我去了我的程序集,並在屬性中添加了一個文件版本並提出了程序集版本,並在註釋中寫了一個日期以真正驗證我是否全部使用了相同的DLL。這樣做後,我重建 - 瞧。

它以某種方式工作。