- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序:
这是一个简单的测试项目,只有 1 个表单 (Form1.cs),所以没什么特别的。我的目标是创建一个具有工作资源管理器的单个程序集应用程序(我已阅读 ILMerge and localized resource assemblies 和 Single-assembly multi-language Windows Forms deployment (ILMerge and satellite assemblies / localization) - possible? 以获取有关如何执行此操作的信息)。
编译项目后,我使用以下命令行参数运行 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 检查合并程序集的内容,我会在资源树节点下看到以下内容:
我有 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.
更新:http://www.filedropper.com/loctest 上提供了包含项目代码的 zip 文件
更新:信不信由你,但如果我分两步执行 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 分两步正确集成程序集的原因的详细信息,但这似乎是目前唯一的解决方案。检查我在问题中的最后修改,看看我是如何做到的。
我仍然很好奇为什么它不能一步完成......
关于c# - ILMerge + 本地化资源程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389037/
在新 PC 上运行 ILMerge。 在其他 PC 上运行良好,但现在退出并显示错误 -2146232576。为什么? 最佳答案 -2146232576 十进制是 80131700 十六进制。 错误
我尝试过: C:\Windows\System32>ilmerge /target:winexe /out:c:\output.exe c:\MyProgram.exe c:\Microsoft.Wi
我们有一个应用程序,其编译后的结构如下所示: 富 一氧化氮 Text.resources.dll SV-SE Text.resources.dll Bar.dll Foo.exe Text.dll 是
我正在尝试使用 ILMerge 创建一个使用 Windows Azure SDK 2.0 的单个可执行文件,包括 Microsoft.WindowsAzure.ServiceRuntime.dll,这
我正在尝试设置大量构建代理,到目前为止,我可以静默安装所有依赖项(使用 powershell、nuget 和 Chocolatey)。 但是,如果没有弹出该死的 GUI,我就无法安装工具 IlMerg
我正在使用 ILMerge 来组合 9 个用 C# .NET 4 编写的 .NET DLL。问题是 ILMerge 卡住了,没有错误消息或任何东西。 日志显示 ILMerge 正确合并了所有程序集,然
例如,假设我想使用 Bouncy Castle在我的 DLL 中。由于我想简化部署,所以我使用 ILMerge 来组合 MyDll.dll和 BouncyCastle.Crypto.dll生产MyDl
我知道 ilmerge 是一个控制台应用程序,但是当我运行它时,它会运行一秒钟然后关闭。所以下面是我尝试使用的预构建代码,它给出了这个问题。 Error 1 The command "ilme
感谢您花时间帮助我。使用:Microsoft Visual C# 2010 Express 我有两个文件:RJFCModPackInstaller.exe 和 Ionic.Zip.dll 我想合并成一
我已经使用 IlMerge 将我项目的所有 dll 合并到一个 exe 中。我使用在主 csproj 的“导入”中引用的目标文件。 目标中的 ExecCommand 是: '"%(Ful
我正在使用 ILMerge 版本 2.11.1103.0 将 4 个 DLL 合并到一个新程序集中。假设分别称为A、B、C、D,则它们之间的关系如下: B -> A C -> A D -> A D -
我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序: \bin\Debug\test.exe \bin\Debug\nl-BE\test.res
我试图将 .dll 文件放入我的 .exe 文件中,但出现此错误: ILMerge.exe: The assembly 'Final' has a value for it's PeKind
我正在使用 ILMerge 合并控制台应用程序使用的库。合并后,生成的 exe 仅在一秒钟内完成执行并在后台运行(不显示 Console.WriteLine 的输出)。 我该怎么做才能将它作为控制台应
您使用 ILMerge 吗?您是否使用 ILMerge 合并多个程序集以简化 dll 的部署?在 ILMerging 程序集在一起后,您是否发现生产中的部署/版本控制存在问题? 我正在寻找有关使用 I
我有项目 A,它引用程序集 B 和程序集 C。程序集 B 也引用程序集 C,但在不同于项目 A 的版本中。两个程序集(B 和 C)都通过 NuGet 在项目 A 中引用(尽管两者都是程序集在我自己的控
我正在尝试使用 ILMerge 将一些传递引用的程序集内化到我正在引用的程序集中,以消除与我项目中其他传递依赖项的冲突。 特别是,我引用了 Antlr3.StringTemplate(以下简称 AS,
我正在使用 ILMerge 合并几个 .NET 程序集,包括一些第 3 方程序集。自从这样做以来,我遇到了几个错误,这些错误都归结为类型定义与定义它们的程序集相关联的事实。 一个简单的示例是我的 Ap
我需要合并一些 dll,文件名和程序集名称都需要与我的主 dll (mydll.dll) 相同。我还需要 pdb 文件。我如何完成这项工作? 以下是我尝试过的一些方法: 只需使用 ILMerge my
我有两个 .NET 库:“Foo.Bar”和“Foo.Baz”。 “Foo.Bar”是独立的,而“Foo.Baz”引用“Foo.Bar”。 假设我执行以下操作: 使用 ILMerge 将“Foo.Ba
我是一名优秀的程序员,十分优秀!