簡體   English   中英

無法將 dll 文件作為嵌入資源加載到我的 class 庫中

[英]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.

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