在mscorlib.dll中发生System.IO.FileNotFoundException?

问题描述 投票:2回答:2

背景:我正在开发一个包含大约12个不同子应用程序的超大型套件。我的目标是使用其中一个子应用程序并创建自己的可执行文件,并将所有DLL嵌入到EXE文件中。到目前为止,我已经能够通过以下步骤嵌入大多数DLL

1)将DLL添加到本地文件夹中的项目,并将它们设置为“嵌入式资源”。

2)将这些DLL添加到“引用”选项卡,并将“复制本地”属性设置为False

3)将这些DLL添加到Resources.resx文件中

我还创建了一个新的Program.cs文件,并将入口点设置为所需子应用程序集中的main函数。我的问题是用于运行整个套件的DLL文件无法嵌入到子应用程序的EXE中,因为我在mscorlib.dll中不断收到System.IO.FileNotFoundException,堆栈框架设置在System.AppDomain.ExecuteAssembly 。但是,我可以完全避免这种异常,我将“Suite.dll”Copy Local属性设置为true。

这是我的程序集解析器处理程序,但它永远不会被命中,因为在Main函数执行之前,托管代码中发生了异常。

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {
            string resourceName  = new AssemblyName(args.Name).Name+".dll";

            string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
            {
                Byte[] assemblyData = new Byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
        };

这甚至可以预防吗?如何解决此依赖关系,以便我可以将Suite DLL文件嵌入到我的子应用程序EXE中?如果需要更多信息,请评论,我将编辑问题。谢谢!

c# .net visual-studio dll
2个回答
2
投票

减少你的主要功能来设置AssemblyResolve,然后调用另一个类中的另一个函数来执行你现在做的任何事情。

为了使用这个技巧,main和者包含的类都不能引用任何打包的程序集,否则当main被jitted时它们无法解析。


1
投票

我遇到了同样的问题,原因是我不小心从项目文件夹中删除了Newtonsoft.Json.dll

© www.soinside.com 2019 - 2024. All rights reserved.