簡體   English   中英

強制執行特定版本的第三方程序集

[英]Enforce a specific version of a third-party assembly

我有一個依賴於一組第三方DLL版本v1.1的應用程序。 為了使用它們,我引用了主程序,該程序位於Program Files文件夾下的某個位置。 該庫使用GAC中安裝的其他庫。

發行了新版本的第三方DLL v1.2 Program Files文件夾中的DLL被新版本替換; 在GAC中,兩個版本共存。

問題是在安裝v1.2時,無需重新編譯,也無需更改app.exe.config文件,即可使應用程序(與DLLs v1.1一起編譯)能夠正常工作。

我是DLL的維護者; 另外的限制是,只有最新版本的DLL安裝在程序文件中,而其他DLL都安裝在GAC中(保留所有版本)。

我的問題是應用程序啟動了,但是由於類型之間的不兼容性,最終我得到了一個錯誤:

Unhandled Exception: System.InvalidCastException:
[A]ThirdParty.User cannot be cast to [B]ThirdParty.User.
Type A originates from 'ThirdParty, Version=1.2.0.0, Culture=neutral, PublicKeyToken=XXXX'
in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\ThirdParty\v4.0_1.2.0.0__XXXX\ThirdParty.dll'.
Type B originates from 'ThirdParty, Version=1.1.0.0, Culture=neutral, PublicKeyToken=XXXX'
in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\ThirdPart\v4.0_1.1.0.0__XXXX\ThirdParty.dll'.

我不確定要如何選擇v1.2 DLL,我想知道該DLL的路徑存儲在應用程序中,而應用程序又決定使用GAC中的DLL來實現該版本? 我正在與用於編譯的系統不同的系統上進行測試,但DLL位於同一位置。 我從文檔中了解到,應該選擇GAC中的v1.1版本,而不是v1.2

我的錯誤在哪里? 我該如何解決?

謝謝,

我在特定情況下找到了解決方案,然后重新閱讀了我的問題,我意識到我沒有提到我的初始DLL確實依賴PowerShell實例。 這是我解決問題的地方。 在我的DLL中,如果GAC中存在該DLL,我會加載一個特定版本,並在我的PowerShell實例中加載它:

var assembly = Assembly.Load("ThirdParty, Version=1.1.0.0, Culture=neutral, PublicKeyToken=XXXX");
var ps = PowerShell.Create();
ps.Commands.AddCommand("Import-Module").AddParameter("-Assembly", assembly);
ps.Invoke();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM