C# 为什么从嵌入式资源加载dll文件不起作用?

C# 为什么从嵌入式资源加载dll文件不起作用?,c#,system.data.sqlite,C#,System.data.sqlite,过去,我通过在main方法中调用以下命令来动态加载文件System.Data.SQLite.dll: static void Main(string[] args) { try { string resource1 = "System.Data.SQLite.dll"; // string resource2 = "Ionic.Zip.Reduced.dll"; Embedde

过去,我通过在main方法中调用以下命令来动态加载文件System.Data.SQLite.dll:

  static void Main(string[] args)
    {
        try
        {
            string resource1 = "System.Data.SQLite.dll"; // 
            string resource2 = "Ionic.Zip.Reduced.dll";

            EmbeddedAssembly.Load(resource1, "System.Data.SQLite.dll");
            EmbeddedAssembly.Load(resource2, "Ionic.Zip.Reduced.dll");
             //
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        }
        catch (Exception E) { File.AppendAllText("myExcept.txt",E.Message); }
    }




  static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        return EmbeddedAssembly.Get(args.Name);
    }
其中EmbeddedAssembly.cs是我在上找到的一个类

我以前已经使用过这种方法,它对我很有效,但现在我需要从c代码动态编译一个cs文件:因此我添加了文件System.Data.SQLite.dll作为嵌入式资源和ReferenceAssembly,类似这样:

            ...

            String exeName = "myFile.exe"

            CompilerParameters cp = new CompilerParameters();
            cp.GenerateExecutable = true;

            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("System.Data.dll");

            // add reference 
            cp.ReferencedAssemblies.Add("System.Data.SQLite.dll");

            // add embedded resources
            cp.EmbeddedResources.Add(@"System.Data.SQLite.dll");

            ...
但是生成可执行文件后,它仍然依赖于System.Data.SQLite.dll文件,因此如果我不将此文件与Exe放在同一文件夹中,该文件将无法工作

另一件让我困惑的事情是,文件Ionic.Zip.Reduced.dll加载正确,而System.Data.SQLite.dll引发异常:

无法加载文件或程序集“System.Data.SQLite,Version=1.0.86.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139”或其依赖项之一。找不到指定的文件


我做错了什么?

为什么要手动加载程序集。可以通过在项目文件中引用它们来执行此操作


作为替代方案,SQLite拥有nuget包。在加载任何CPU/x86或x64的程序集时,使用此选项非常方便。

我这样做是因为我用cs文件以编程方式编译可执行文件。您能更详细地描述一下吗?dll文件System.Data.SQLite.dll是另一个应用程序中使用CodeProvider,因此,我无法使用IDE手动添加引用,我正在搜索一种解决方案,该解决方案允许我以编程方式引用dll文件,将其作为嵌入式资源添加,并在应用程序启动时动态加载,正如我在问题中附加的链接中所述。但此解决方案仅适用于一个dll文件Ionic.Zip.Reduced.dll,而不适用于System.Data.SQLite.dll。我得到了上面的例外。可能是个愚蠢的问题,但是你检查了版本号了吗:version=1.0.86.0?是的,版本号是相同的。在IDE中,我必须在configuration manager中指定x86,而不是任何CPU。我如何通过编程来实现它?