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 + 本地化资源程序集 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile

随机推荐

  • 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