ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#4.0使用.NET合并.dll程序集

2019-05-31 10:54:18  阅读:176  来源: 互联网

标签:c net merge assemblies dll


我决定让我的other question死了,因为我想到了一个新想法,使用this page写的Jeffrey Richter方法将.dll库合并到我的应用程序中.所以我将.dll文件添加为嵌入式资源,并将其添加为参考.然后在Program.cs中(我不知道他发布的代码应该去哪里),我添加了这个:

    ...
    [STAThread]
    static void Main()
    {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            string[] args = Environment.GetCommandLineArgs();
            if (args.Length > 1)
                _in = args[1];
            SingleInstanceController controller = new SingleInstanceController();
            controller.Run(args);

            AppDomain.CurrentDomain.AssemblyResolve += (sender, argsx) =>
{
String resourceName = "AssemblyLoadingAndReflection." +
   new AssemblyName(argsx.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
    Byte[] assemblyData = new Byte[stream.Length];
    stream.Read(assemblyData, 0, assemblyData.Length);
    return Assembly.Load(assemblyData);
    }
}
        ;

我应该将resourceName更改为其他内容吗?我是否正确添加(在正确的位置)?

现在问题是,它仍然无法找到并加载程序集,我不确定我做错了什么.任何帮助,将不胜感激.

解决方法:

在AppDomain尝试解析引用(即入口点和第一行)之前挂钩到AssemblyResolve事件.

嵌入的资源名称以应用程序名称开头,后跟资源名称.
例如:ConsoleApplication.Test.dll.

标签:c,net,merge,assemblies,dll
来源: https://codeday.me/bug/20190531/1188894.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有