[英]Can't load dll files as an embedded resource to my class library
我希望將 dll 文件嵌入並加載到我的 class 庫中,以便它可以包含在一個 dll 中。
我有一個名為 Wraper 的Class庫。
我正在使用一個名為ConsoleApp的控制台應用程序來運行Wraper Class庫。
class Program
{
static void Main(string[] args)
{
Wallet X = new Wallet();
X.SendPayment("1", "Driver={ODBC Driver 17 for SQL Server};Server=.;Database=Home;Trusted_Connection=yes;");
}
}
我的 dll 文件位於 Wraper 項目的一個名為EmbeddedAssemblies的文件夾中
我想在我的項目中加載這些文件。 這是我的Wraper Class庫中的代碼:
public void SendPayment(string DCode, string ConnectionString)
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
...
Console.WriteLine("A break point WILL stop here.");
...
}
// This method does not seem to run. Why????
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
...
Console.WriteLine("A break point WILL NOT stop here.");
...
string baseResourceName = Assembly.GetExecutingAssembly().GetName().Name + "." + new AssemblyName(args.Name).Name;
byte[] assemblyOdbc = null;
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Wraper.EmbeddedAssemblies.System.Data.Odbc.dll"))
{
assemblyOdbc = new Byte[stream.Length];
stream.Read(assemblyOdbc, 0, assemblyOdbc.Length);
}
byte[] assemblyNewton = null;
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Wraper.EmbeddedAssemblies.Newtonsoft.Json.dll"))
{
assemblyNewton = new Byte[stream.Length];
stream.Read(assemblyNewton, 0, assemblyNewton.Length);
}
Console.WriteLine("loaded");
return Assembly.Load(assemblyOdbc, assemblyNewton);
}
我不確定為什么這不起作用它構建沒有錯誤但是當我在 CurrentDomain_AssemblyResolve 方法中放置一個斷點時它甚至沒有 go 到斷點,因此程序集不會加載。
我究竟做錯了什么?
加載程序集的代碼必須從 ConsoleApp 中的 Main 方法加載? 如果是這樣,有解決辦法嗎? 我無權訪問該區域
是的。 常見的解決方法是在引用程序集的類型的static 構造函數中掛鈎 AssemblyResolve。 這還早,因為:
它在創建第一個實例或引用 class 中聲明的任何 class 成員(不是其基類)之前初始化 class。 static 構造函數在實例構造函數之前運行。
特別是 static 構造函數在任何類型的方法被 JIT 之前運行,這是引用的程序集需要可用的時候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.