AppDomain.CurrentDomain.AssemblyResolve 请求 .resources 程序集?

2023-12-29

使用代码如何将附属程序集嵌入到 EXE 文件中 https://stackoverflow.com/questions/1453755/how-to-embed-a-satellite-assembly-into-the-exe-file/1454496#1454496由 csharptest.net 提供,我创建了一个自定义程序集解析器并将我的程序集嵌入到我的资源中。

我可以成功解析我使用的程序集,但不知何故 AppDomain.CurrentDomain.AssemblyResolve 要求一个名为“AppName.resources”的程序集,特别是“MyProgram.resources,Version = 0.15.3992.31638,Culture = en-US,PublicKeyToken = null”,我不这样做不知道如何解决?

我尝试禁用从资源加载自定义程序集(将所有程序集 dll 放在程序目录中)并仅启用 AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求这样做。

我对此有点困惑,如果您能在这方面帮助我,我将不胜感激。

这是我的代码,供感兴趣的人使用;

static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
    Assembly assembly = null;
    string name = args.Name.Substring(0, args.Name.IndexOf(','));
    if (name == "MyProgram.resources") return null;
    else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);

    lock (_loadedAssemblies)
    {
        if (!_loadedAssemblies.TryGetValue(name, out assembly))
        {
            using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
            {
                if (io == null)
                {
                    MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Environment.Exit(-1);
                }
                using (BinaryReader binaryReader = new BinaryReader(io))
                {
                    assembly = Assembly.Load(binaryReader.ReadBytes((int)io.Length));
                    _loadedAssemblies.Add(name, assembly);
                }
            }
        }
    }

    return assembly;
}

我自己回答;

将这一行添加到 AssemblyInfo.cs 可以解决这个问题,并且解析器将不再被要求提供资源。

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]

尽管这是一种解决方法,但应该仔细考虑多语言应用程序。

更多信息:

  • https://connect.microsoft.com/VisualStudio/feedback/details/526836/wpf-appdomain- assemblyresolve-being- Called-when-it-shouldnt https://connect.microsoft.com/VisualStudio/feedback/details/526836/wpf-appdomain-assemblyresolve-being-called-when-it-shouldnt
  • http://blogs.msdn.com/b/kimhamil/archive/2008/11/11/what-does-the-neutralresourceslanguageattribute-do.aspx http://blogs.msdn.com/b/kimhamil/archive/2008/11/11/what-does-the-neutralresourceslanguageattribute-do.aspx
  • http://forums.devshed.com/net-development-87/c-wpf-appdomain- assemblyresolve-being- Called-when-it-shouldn-t-669567.html http://forums.devshed.com/net-development-87/c-wpf-appdomain-assemblyresolve-being-called-when-it-shouldn-t-669567.html
  • http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

对于具有非 en-US 文化的计算机,此方法会失败。更好的方法是忽略程序集解析器上的资源;

public Assembly Resolver(object sender, ResolveEventArgs args)
        {
            lock (this)
            {
                Assembly assembly;
                AssemblyName askedAssembly = new AssemblyName(args.Name);

                string[] fields = args.Name.Split(',');
                string name = fields[0];
                string culture = fields[2];
                // failing to ignore queries for satellite resource assemblies or using [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)] 
                // in AssemblyInfo.cs will crash the program on non en-US based system cultures.
                if (name.EndsWith(".resources") && !culture.EndsWith("neutral")) return null;

                /* the actual assembly resolver */
                ...
            }
      }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppDomain.CurrentDomain.AssemblyResolve 请求 .resources 程序集? 的相关文章

随机推荐

  • Lotus Domino Designer 中的源代码控制

    多年来 我们一直在一个大型项目中使用 Domino 但没有任何真正的源代码控制 除了服务器备份 因此 当我注意到最新的 Designer 8 5 3 具有与 SVN 集成的潜力时 我感到非常高兴 我无法仅通过以下方式让 SVN 工作原始说明
  • $watch'ing Angular 指令中的数据更改

    我怎样才能触发 watch当操作内部数据 例如 插入或删除数据 时 在 Angular 指令中使用变量 但不为该变量分配新对象 我当前正在从 JSON 文件加载一个简单的数据集 我的 Angular 控制器执行此操作 并定义了一些函数 Ap
  • 将记录从android中的hashmap保存到数据库中

    我只是想寻求帮助 我在列表视图中填充了一个哈希图 下面的代码是我的哈希图的代码 mylist new ArrayList
  • 使用Shapeless通过HList将Future的tuple转换为tuple的Future

    有没有一种简单的方法将 Future A Future B Future C Future N 类型的元组转换为 Future A B C N 这假设元组中元素的数量未定义 我尝试将元组转换为 HList 并尝试了类似的 FoldLeft
  • 这些图中的箭头图例(MVC - MVP - MVVM)是什么?

    我尝试理解 MVC MVP 和 MVVM 模式之间的主要区别 我找到了这 3 个图表 但我不确定是否理解它们 你能帮我解释一下虚线和实线的图例是什么吗 MVC 来自维基百科的定义 来自 Microsoft MSDN 网站的 MVP 来自微软
  • Python tkinter treeview获取/返回所选项目的父名称

    我试图在选择事件时返回 tkinter 树视图选择的父项 因此 如果选择更改为 子项 我希望它打印 父项 下面的工作示例 当前它打印选择项 而不是父项选择 try import tkinter as tk import tkinter tt
  • UML 序列图中的构造函数

    下面的序列图和构造函数 表示为创建对象 的含义是什么 消息的名称 Class B 是错误的 它应该是 create 这就是让你困惑的地方吗
  • 通过“/”在多行中一次拆分数千列,对新行中的值进行排序并添加“NA”值

    我想分割一个包含数千列的数据框 数据框如下所示 sample data of four columns sample lt read table stdin header TRUE sep POS v1 v2 v3 v4 152 0 0 1
  • 如何访问 .URL 文件中的 URL 和书签标题?

    我正在使用 NET 2 0 Visual Studio 2005 C 下面的代码从包含书签的 url 文件的目录中获取 IE 收藏夹 书签 的文件名 Example 用户 收藏夹 blah url 但我真正想要的是该文件内的书签 URL 当
  • 使文档可通过 java/servlet 下载

    我需要知道java servlet中是否有一种方法可以使存储在数据库中的文档 doc pdf 可供用户按请求的方式下载 请参见下文 例如 有一个网页和其中文档的链接 现在是这样完成的 如果用户单击该链接 则会打开一个新的空白窗口 并显示下载
  • MVC 最佳实践

    我是 MVC 新手 我正在使用 codeigniter 想知道应该在哪里放置 cut description 函数 我的模型检索事件列表 包括其描述 如果描述太长 我需要在前 n 个单词之后将其剪掉 并添加一个 阅读更多 链接 这样视图就不
  • 如何在 lldb 中打印 Vec

    我想使用 ascii 格式逐字节打印 vec let slice1 b abcdefg 我可以像这样打印结构 lldb p slice1 u8 slice1 data ptr 0x00007ff9abe00020 length 7 当我尝试
  • Java 线程等待锁定未(明显)锁定的对象

    通常 当我要求进行线程转储时 很容易解释性能不佳的系统的症状 即通常情况下 我可以看到许多线程显然正在等待已被另一个线程获取但未释放的监视器 在本例中 我有很多线程在等待监视器 0x965ad100 但似乎没有一个线程首先拥有该监视器 可以
  • 如何对数据库中的商品进行折扣建模?

    我正在建立一个电子商务网站 并希望在有限的时间内为某些商品提供折扣 我的产品表 MySQL 如下所示 Product productId Name Weight Price price as on the cover of the item
  • 使用 QAction 而不添加到菜单(或工具栏)

    我正在尝试开发一个具有非常模块化的命令方法的应用程序 并且认为这会很好 因为我正在使用 pyqt 使用 QAction 将快捷方式绑定到命令 但是 似乎操作快捷方式仅在操作在菜单或工具栏中可见时才起作用 有谁知道如何在不可见的情况下让此操作
  • Swift 和 CoreData 使用自定义类作为可转换对象

    我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象 我一直在浪费时间试图弄清楚但无法解决 我不断收到两个错误 无法将属性标记为 NSManaged 因为它的类型无法在 Objective C 中表示 并且属性无法
  • 捕获字符串格式中的 **vars() 模式

    我经常发现自己使用以下模式进行字符串格式化 a 3 b foo c dict mykey myval prints a is 3 b is foo mykey is myval print a is a b is b mykey is c
  • 如何调用 SQLitePCL.Batteries.Init()?

    我正在尝试为我的应用程序创建 SQLite 数据库 但遇到了此错误 System Exception 您需要调用 SQLitePCL raw SetProvider 如果 您正在使用捆绑包 这是通过调用完成的 SQLitePCL Batte
  • 如何使用 Firefox 扩展上传二进制内容?

    在我的 Firefox 扩展中 我下载了该文件 然后该扩展应该上传它 我执行以下操作 downloading file var persist Components classes mozilla org embedding browser
  • AppDomain.CurrentDomain.AssemblyResolve 请求 .resources 程序集?

    使用代码如何将附属程序集嵌入到 EXE 文件中 https stackoverflow com questions 1453755 how to embed a satellite assembly into the exe file 14