c# - System.IO.FileNotFoundException 出现在 mscorlib.dll 中?

标签 c# .net visual-studio dll

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

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

2) 将这些 DLL 添加到 References 选项卡并将 Copy Local 属性设置为 False

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

我还创建了一个新的 Program.cs 文件,并将入口点设置为位于所需子应用程序程序集中的主函数。我的问题是用于运行整个套件的 DLL 文件无法嵌入到子应用程序的 EXE 中,因为我在 mscorlib.dll 中不断收到 System.IO.FileNotFoundException,堆栈框架设置为 System.AppDomain.ExecuteAssembly .但是,我可以完全避免此异常,因为我将“Suite.dll”复制本地属性设置为 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 中?如果需要更多信息,请发表评论,我将编辑问题。谢谢!

最佳答案

将您的 main 函数缩减为设置 AssemblyResolve,然后调用另一个类中的另一个函数来执行您现在 main 正在做的任何事情。

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

关于c# - System.IO.FileNotFoundException 出现在 mscorlib.dll 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142363/

相关文章:

c# - 如何递归地填充数组

c# - ASP.NET ListView 数据源是字符串[]

c# - SQL Server 数据库单元测试和持续集成

C# - 使用 "Paint"在面板中绘图

C# 列表删除不区分大小写

c# - 后面的代码如何从另一个类访问HTTP请求信息

c# - 这个 BlockingQueue 容易死锁吗?

c# - Async/Await 和 Dispatcher 之间的区别

c# - 日期时间序列化器省略毫秒?

c++ - Visual Studio 2012 __cplusplus 和 C++ 11