ILMerge + 本地化资源程序集

2023-11-22

我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序:

  • \bin\调试\test.exe
  • \bin\Debug\nl-BE\test.resources.dll
  • \bin\Debug\fr-FR\test.resources.dll

这是一个简单的测试项目,只有 1 个表单 (Form1.cs),所以没有什么特别的。 我的目标是创建一个带有工作资源管理器的单个程序集应用程序(我已阅读ILMerge 和本地化资源程序集 and 单程序集多语言 Windows 窗体部署(ILMerge 和卫星程序集/本地化)- 可能吗?有关如何执行此操作的信息)。

编译项目后,我使用以下命令行参数运行 ILMerge:

ilmerge /log:test.txt /target:winexe /copyattrs /allowdup /out:test_merged.exe 
"C:\projectdir\bin\Debug\test.exe" "C:\projectdir\bin\Debug\fr-FR\test.resources.dll" 
"C:\projectdir\bin\Debug\nl-BE\test.resources.dll"

如果我使用 Reflector 检查合并程序集的内容,我会在资源树节点下看到以下内容:

  • test.Form1.fr-FR.resources
  • test.Form1.fr-FR.resources
  • 测试.Form1.资源
  • 测试.属性.资源.资源

我拥有 2 倍的 fr-FR 资源,而不是 fr-FR 和 nl-BE 资源。这是因为资源 dll 具有相同的名称吗?结果是我只能在运行时获取fr-FR资源。

有任何想法吗 ?

更新(日志文件内容): (注意:二进制文件以“loc_”为前缀,为了清楚起见,我在之前的帖子中将它们省略了)

ILMerge version 2.10.526.0
Copyright (C) Microsoft Corporation 2004-2006. All rights reserved.
ILMerge /log:loc_test.txt /target:winexe /copyattrs /allowdup /out:loc_test_merged.exe c:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\loc_test.exe C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll 
Set platform to 'v2', using directory 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\..\v2.0.50727' for mscorlib.dll
Running on Microsoft (R) .NET Framework v2.0.50727
mscorlib.dll version = 2.0.0.0
The list of input assemblies is:
    c:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\loc_test.exe
    C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll
    C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll
Trying to read assembly from the file 'c:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\loc_test.exe'.
    Successfully read in assembly.
    There were no errors reported in loc_test's metadata.
Trying to read assembly from the file 'C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll'.
Can not find PDB file. Debug info will not be available for assembly 'C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll'.
    Successfully read in assembly.
    There were no errors reported in loc_test.resources's metadata.
Trying to read assembly from the file 'C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll'.
Can not find PDB file. Debug info will not be available for assembly 'C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll'.
    Successfully read in assembly.
    There were no errors reported in loc_test.resources's metadata.
Checking to see that all of the input assemblies have a compatible PeKind.
    loc_test.PeKind = ILonly
    loc_test.resources.PeKind = ILonly
    loc_test.resources.PeKind = ILonly
All input assemblies have a compatible PeKind value.
Merging assembly 'loc_test' into target assembly.
Merging assembly 'loc_test.resources' into target assembly.
Merging assembly 'loc_test.resources' into target assembly.
Merging assembly-level attributes from assembly 'loc_test' into target assembly.
Copying 2 Win32 Resources from assembly 'loc_test' into target assembly.
Transferring entry point 'loc_test.Program.Main' from assembly 'loc_test' to assembly 'loc_test_merged'.
    There were no errors reported in the target assembly's metadata.
ILMerge: Writing target assembly 'loc_test_merged.exe'.
AssemblyResolver: Assembly 'System' is referencing assembly 'System.Configuration'.
    AssemblyResolver: Attempting referencing assembly's directory.
Can not find PDB file. Debug info will not be available for assembly 'System.Configuration'.
Resolved assembly reference 'System.Configuration' to 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.dll'. (Used referencing Module's directory.)
Location for referenced assembly 'System.Windows.Forms' is 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll'
    There were no errors reported in  System.Windows.Forms's metadata.
Location for referenced assembly 'System' is 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll'
    There were no errors reported in  System's metadata.
Location for referenced assembly 'mscorlib' is 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll'
    There were no errors reported in  mscorlib's metadata.
Location for referenced assembly 'System.Drawing' is 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll'
    There were no errors reported in  System.Drawing's metadata.
ILMerge: Done.

更新:包含项目代码的 zip 文件可在http://www.filedropper.com/loctest

更新:不管你信不信,但如果我分两步执行 ILMerge,它就会起作用!

ilmerge /log:loc_test.txt /target:winexe /copyattrs /allowdup /out:loc_test_merged.exe "c:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\loc_test.exe" "C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll"

ilmerge /log:loc_test.txt /target:winexe /copyattrs /allowdup /out:loc_test_merged_2.exe loc_test_merged.exe "C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll"

这可能是什么原因?

谢谢, 贾尼克


虽然我不知道 ILMerge 分两步正确集成程序集的详细原因,但这似乎是目前唯一的解决方案。检查我在问题中的最后编辑,看看我是如何做到这一点的。

我仍然很好奇为什么它不能一步完成......

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

ILMerge + 本地化资源程序集 的相关文章

  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 纹理映射 C++ OpenGL

    我已经阅读了相关内容 包括 Nehe 和此处的解决方案 但我找不到具体的答案 我正在尝试加载一张名为stars jpg 的照片 我想通过使用 uv 坐标映射它来使其成为场景的背景 方法是 glBegin GL QUADS glTexCoor
  • .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

    NET 4 0 程序集调用 NET 2 0 程序集中的代码是否存在兼容性障碍 反之亦然 更具体地说 我正在研究在使用基于 NET 2 0 的第三方应用程序时升级到 Visual Studio 2010 该应用程序可通过引用我的自定义代码的挂
  • 如何通过实体键添加/删除与实体框架的多对多关系?

    I tried using Entities e new Entities EntityKey key new EntityKey Entities Users UserId 20 User user new User EntityKey
  • 如何有效地左填充字节数组

    假设我有一个数组 LogoDataBy byte 0x00000008 0x00000000 0x41 0x00000001 0x42 0x00000002 0x43 0x00000003 0x44 0x00000004 0x31 0x00
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 用于轻松动态反射的 C# 库

    是否有任何库 例如开源项目等 可以更轻松地使用复杂的反射 例如动态创建对象或类 检查实例等 Thanks 有一个LinFu http www codeproject com KB cs LinFuPart1 aspx可用的库除了反射之外还可
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • 获取RFC返回的嵌套结构的值?

    我是 C 新手 我有 rfc 它以嵌套结构的形式从 SAP 系统返回数据 但是当我使用以下方式获取该数据时 IrfcTable table rfc getTable exporting parameter et customer 它仅返回第
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 初始化二维数组时出现分段错误

    我已经检查过我的代码是否正确地划分了内存空间 但是一旦我尝试将 2D 数组初始化为某些值 然后对这些值求和 我就会在 2x2 数组上收到分段错误 我想最终将我的代码扩展到更大的数组 但我什至无法让它在这里工作 我知道有很多关于 malloc
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List
  • 如何获取数字列的确切类型,包括。规模和精度?

    有没有办法知道列中列的确切类型DataTable 现在我正在这样做 DataTable st dataReader GetSchemaTable foreach DataColumn col in st Columns var type c
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么

随机推荐

  • SpriteKit:预加载 SKTextureAtlas 时性能受到影响

    预加载时我遇到了性能下降问题SKTextureAtlas let textureAtlas SKTextureAtlas named atlasName textureAtlas preload completionHandler 我所说的
  • 如何使用 scipy.optimize.least_squares 计算标准差误差

    我将拟合与optimize curve fit和optimize least squares进行比较 使用 curve fit 我得到协方差矩阵 pcov 作为输出 我可以通过以下方式计算拟合变量的标准偏差误差 perr np sqrt n
  • 使用 zlib 解压缩 .zip 文件的简单方法[重复]

    这个问题在这里已经有答案了 是否有一个简单的示例来说明如何解压缩 zip 文件并将文件提取到目录 我目前正在使用 zlib 虽然我知道 zlib 不直接处理 zip 文件 但 zlibs 的 contrib 库中似乎还有一些额外的东西 我注
  • 如何使学说支持时间戳列?

    我正在尝试应用以下迁移 Schema table users function Blueprint table table gt timestamp created at gt useCurrent gt change But artisa
  • 数组作为参数列表lua

    今天我正在使用 lua 进行一些工作 使用对我来说是 oldesh 的语言 并且确实找到了可以将参数作为数组获取的内容 例如 soo function foo someting local arrayofargs arg code here
  • 在控制器和视图之间仅传递两个变量 - 最佳实践?

    找到了这个最佳实践 甚至在 RubyMine 中进行了检查 每个控制器和视图之间仅共享一两个实例变量 Ruby on Rails 代码质量检查表 例如 建议的方法是什么 传递两个数组及其在控制器中计算的总值 这会产生 4 个实例变量 或者传
  • Spring MVC + Spring Security 使用 Rest Web 服务登录

    我有一个 SpringMVC Web 应用程序 需要通过发送用户名和密码来使用 Spring Security 对 RESTful Web 服务进行身份验证 当用户登录时 需要在用户的浏览器中设置 cookie 并在后续调用中使用 cook
  • ARM qemu 系统模拟器可以在没有内核参数的情况下从卡映像启动吗?

    我看过很多如何运行 QEMU ARM 板模拟器的示例 在每种情况下 除了 SD 卡图像参数之外 QEMU 还始终提供内核参数 即 qemu system arm M versatilepb kernel vmlinuz 2 6 18 6 v
  • 为什么 EXE 不是二进制的?

    为什么如果你在十六进制编辑器中打开一个EXE 你会看到各种各样的东西 如果计算机只理解二进制 那么文件中不应该只有 2 个可能的符号吗 谢谢 您将内容与表示混淆了 计算机上的每个文件都可以用二进制 1 和 0 表示 实际上这就是它通常存储在
  • 在 Twig 中过滤和拼接数组

    我有一个用户记录数组 0 索引 来自数据库查询 每个记录都包含一个字段数组 按字段名称索引 例如 Array 0 gt Array name gt Fred age gt 42 1 gt Array name gt Alice age gt
  • 在Python中,函数返回的是浅拷贝还是深拷贝?

    在Python中 如果我有 x y 对 x 的任何修改也会修改 y 我可以这样做 x deepcopy y 如果我想在处理 x 时避免修改 y 相反 说我有 myFunc return y def main x myFunc 修改 x 是否
  • 任意大小的凸多边形之间的碰撞检测算法

    我正在研究小行星克隆 一切都是 2D 并用 C 编写 对于小行星 我生成随机的 N 边多边形 我保证它们是凸的 然后我旋转它们 给它们一个旋转速度 让它们飞过太空 这一切都很有效 而且非常漂亮 对于碰撞 我使用了我自己想到的算法 这可能是一
  • 如何替换 SQL 中的左连接

    谁能告诉我如何在不真正使用左连接的情况下编写左连接的等效项 Select from a left join b on a name b name 请记住 SQL 的外连接是一种关系并集 专门用于投影空值 如果您想避免使用空值 在我看来这是一
  • 如何在 ASP.NET MVC 中对 ActionFilter 进行单元测试?

    有一个ActionFilter在我的控制器类上 这OnActionExecuting当在 Web 应用程序中调用控制器的操作时 方法将被调用 现在我打电话给Action在单元测试中 NiceController niceController
  • R:使用 mongolite 更新 mongodb 中的条目

    我有一个mongo包含我传递给某些人的信息的数据库R用于分析的脚本 我目前正在使用mongolite传递信息的包mongo to R 我在每个 mongo 条目中有一个名为checkedByR 这是一个二进制文件 指示该条目是否已被分析R已
  • Hibernate 标准:左外连接,对两个表都有限制

    我正在执行 LEFT OUTER JOIN 但我只能对第一个表应用限制 有没有办法也适用于第二张桌子 这是我的代码 Criteria criteria this crudService initializeCriteria Applican
  • 带大括号的 std::vector init 调用复制构造函数两次

    为什么当我用大括号初始化 std vector 时 std vector
  • Android ExpandableListView 带按钮的父级

    我正在努力实现这样的目标 可扩展列表由某些类别的名称组成 当单击父级时 它会显示该类别中所有子级的列表 现在 假设我想动态地将一个子项添加到任何类别中 我怎么做 我是否要为列表中的每个家长保留一个按钮 单击该按钮将在其下添加一个新孩子 但环
  • 这是在 C++11 中将一个 std::vector 的内容移动到另一个 std::vector 的末尾的最有效方法吗?

    我在想vector insert and std copy 命令需要额外的分配 然而 如果我push back 一个新创建的元素然后swap 我认为只要包含的类型不使用默认构造函数分配 这就会减少任何分配 我的问题实际上是专门针对std v
  • ILMerge + 本地化资源程序集

    我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序 bin 调试 test exe bin Debug nl BE test resources dll bin Debug fr FR