[英]Reference .dlls on runtime?
如果您觀察到以下圖片,我的“RSR.exe”應用程序運行完全正常,因為兩個.dll位於同一文件路徑上; 但是,如果這兩個.dll不與RSR.exe位於同一文件路徑/目錄中,則會導致崩潰/'程序已停止工作'。
以下是我試圖使用的以下代碼,但沒有成功。
public static MainForm _mainForm;
static string subPath = @"C:\Users\Public\Documents\RSR";
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (!Directory.Exists(subPath))
{
Directory.CreateDirectory(subPath);
if (IntPtr.Size == 4)
{
File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\MouseKeyboardActivityMonitor.dll", Properties.Resources.MouseKeyboardActivityMonitor);
File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\WindowsFormsAero.dll", Properties.Resources.WindowsFormsAero);
}
else
{
File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\MouseKeyboardActivityMonitor.dll", Properties.Resources.MouseKeyboardActivityMonitor1);
File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\WindowsFormsAero.dll", Properties.Resources.WindowsFormsAero);
}
}
AssemblyName asm1 = AssemblyName.GetAssemblyName(@"C:\Users\Public\Documents\RSR\MouseKeyboardActivityMonitor.dll");
Assembly.Load(asm1);
AssemblyName asm2 = AssemblyName.GetAssemblyName(@"C:\Users\Public\Documents\RSR\WindowsFormsAero.dll");
Assembly.Load(asm2);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (_mainForm = new MainForm())
{
Application.Run(_mainForm);
}
Cursor normalCursor1 = new Cursor(new System.IO.MemoryStream(Properties.Resources.cursor_normal));
SetSystemCursor(normalCursor1.Handle, 32512);
}
以下是2 .dll不在同一目錄/路徑中時的崩潰信息圖。
任何援助將不勝感激。
謝謝。
如果必須將DLL打包為嵌入式資源,則可以通過動態程序集解析來加載它。 您的代碼也必須運行加載權限。
public static MainForm _mainForm;
{
//Add this in your main initialization
AppDomain.CurrentDomain.AssemblyResolve+=new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("FullNameSpace.MouseKeyboardActivityMonitor"))
{
return Assembly.Load(Properties.Resources.MouseKeyboardActivityMonitor);
}
if (args.Name.Contains("FullNameSpace.MouseKeyboardActivityMonitor"))
{
return Assembly.Load(Properties.Resources.WindowsFormsAero);
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.