[英]Loading Assemblies in c# application at runtime not present in application working directory
我正在開發需要一些第三方程序集(DLL)的ac#控制台應用程序。 在開發機器上,我知道這些程序集的位置,因此可以將它們添加為對VS2010項目的引用。 但我不確定客戶端(用戶)機器上的這些程序集路徑。 我可以從環境變量或注冊表值(可以由第三方工具或用戶添加)中獲得這些程序集的位置。 那么我的應用程序如何加載這些程序集?
如果程序集安裝在客戶端上,則會自動加載它們,因為它們應位於GAC中。 如果不是,則它們應與.exe放在同一文件夾中,或者可以通過Appdomain.AssemblyResolve事件以編程方式加載它們。 如果找不到程序集,則會觸發此事件:
public MainWindow()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
InitializeComponent();
}
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string assemblyName = args.Name.Remove(args.Name.IndexOf(',')) + ".dll";
string s = @"C:\dlls\" + assemblyName;
if (File.Exists(s))
{
return Assembly.LoadFile(s);
}
return null;
}
//編輯:注意這一點,有時找不到很多程序集,這通常不是問題,因為它只是在其他地方搜索。 但是,如果您決定重寫此代碼並嘗試加載所有未找到的程序集,即刪除file.exists,則代碼將中斷。
如果將引用的程序集的“ Copy Local
屬性設置為true
,則第三方程序集將復制到可執行文件附近的bin目錄中。
這意味着當您將應用程序安裝在另一台計算機上時,這些dll將與可執行文件位於同一目錄中,因此加載這些程序集不會有任何問題。
好吧,如果我不明白您的問題是。
您具有C#
應用程序,該應用程序通過AddReference靜態鏈接到Visual Studio解決方案中的某些DLL。 但是在客戶端計算機上,這些DLL不在相同的位置,而是通過一些已知的位置。
要解決這個問題,應該足夠使用了
在實際打電話之前
Application.Run(new MainForm());
這樣一來,你會告訴你的域查找自定義查找路徑也為引用。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.