问题标签 [ilmerge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
454 浏览

ilmerge - ILMerge 问题:仅从命令提示符开始

我使用 ILMerge 在 C#.Net 2.0 中构建 5 个 DLLS 和我的 exe 到一个 exe 文件。问题是,现在每次我启动输出 exe 时,都会打开一个带有 exe 的空命令提示符。任何人都知道这个问题并知道如何解决它?

0 投票
2 回答
136 浏览

.net - 我怎么知道 ILMerge 已被使用

我希望能够判断一个程序集是否是在两个不同程序集上使用 ILMerge 的输出/结果。不管它有多详细,如果我必须解析 IL,我愿意这样做。是否有任何迹象表明程序集作者使用了 ILMerge?

0 投票
9 回答
74235 浏览

visual-studio - 如何将 ILMerge 集成到 Visual Studio 构建过程中以合并程序集?

我想将一个 .NET DLL 程序集和一个由 VB.NET 控制台应用程序项目引用的 C# 类库项目合并到一个命令行控制台可执行文件中。

我可以从命令行使用 ILMerge 来完成此操作,但我想将这种引用程序集和项目的合并集成到 Visual Studio 项目中。根据我的阅读,我知道我可以通过 MSBuild 任务或目标来执行此操作,只需将其添加到 C#/VB.NET 项目文件中,但我找不到具体示例,因为 MSBuild 是一个大主题。此外,我发现一些将 ILMerge 命令添加到 Post-build 事件的参考资料。

  1. 如何将 ILMerge 集成到只是 MSBuild 项目的 Visual Studio (C#/VB.NET) 项目中,以将所有引用的程序集 (copy-local=true) 合并到一个程序集中?

  2. 这如何与可能的 ILMerge.Targets 文件联系起来?

  3. 使用 Post-build 事件会更好吗?

0 投票
1 回答
1629 浏览

c# - 如何在 Visual Studio 中设置路径环境变量?

我在我的后期构建步骤中使用 ILMerge。
出于互操作性的原因,我想使用 ILMerge 相对路径。
如何设置可从我的后期构建步骤访问的路径环境变量?

0 投票
1 回答
654 浏览

.net - .NET ILmerged 程序集的性能

我有两个 .NET 库:“Foo.Bar”和“Foo.Baz”。
“Foo.Bar”是独立的,而“Foo.Baz”引用“Foo.Bar”。

假设我执行以下操作:

  • 使用 ILMerge 将“Foo.Bar.dll”与“Foo.Baz.dll”合并为“Foo1.dll”。
  • 创建一个包含“Foo.Bar”和“Foo.Baz”整体的新解决方案(因为我可以访问它们的源代码),并将其编译为“Foo2.dll”。

在外部项目中使用 Foo1.dll 和 Foo2.dll 的功能时,它们的性能会有什么不同吗?如果是这样,这种性能差异有多显着,它是一次性的(负载时?)还是持续的差异?这两种方法还有其他优点或缺点吗?

0 投票
1 回答
1248 浏览

vb.net - Strong name validation failed on VB.NET Assembly

I have a VB.Net 1.1 application works just fine after compiling in Visual Studio. However, I want to use ILMerge to combine all the referenced assemblies into a single executable just to make it easier to move around. After I send it through ILMerge and try to run it I get the error

"Strong name validation failed for assembly.exe" .....

But none of my stuff is strong named! I saw this post here: Strong Name Validation Failed and tried running it through 'sn.exe -Vr merged.exe' but that gives me this error:

"merged.exe does not represent a strongly named assembly"

Has anyone else had this problem before? How do I fix it?

UPDATE:

I'm starting to feel like Strong name validation isn't the real problem here. I'm building against .NET v1.1 and running on a machine where that is the only .NET version installed (happens to be Windows 2003). The merged executable appears to die with that error on every Windows 2003 machine I try, but if I try to run it on a more modern OS (Vista) it at least starts, but that's not really a good test since the environment isn't fit for a real test.

  • I have verified that my app.config has the correct settings (specifying required and supported runtime version of v1.1.4322)
  • I use the /targetplatform:v1.1 option when running my assemblies through ILMerge.

ILMerge is definitely causing the problem (i.e. it works fine before I merge), I just don't know how to fix it.

0 投票
2 回答
1575 浏览

.net - 在 Visual Studio 项目中引用使用 ILMerge 创建的程序集

我在 Visual Studio 中有一个包含 5 个项目的解决方案。他们是:

  • Foo.Core: 核心功能
  • Foo.Api: 构建在核心之上的生成代码
  • Foo.Web: 特定于 Web 的扩展
  • Foo.Web.Mvc: MVC 特定的扩展
  • Newtonsoft.Json: 第三方库

我想使用 ILMerge 将Foo.Core,Foo.Api合并Newtonsoft.Json到一个名为Foo. 那是容易的部分。

我遇到的问题是,Foo.Web两者Foo.Web.Mvc都需要引用所有三个合并的程序集。

如果我引用原始程序集,在我执行 ILMerge 后它们将具有无效引用。

如果我引用 ILMerged 程序集,我必须引用一个调试程序集,然后在打包所有内容之前对其进行更改,这似乎并不理想。

我尝试创建一个名为 的项目Foo,它引用了 3 个合并的程序集并用 ILmerged 程序集替换了它自己的输出,但这似乎根本不起作用。

有没有可靠的方法来做到这一点?

0 投票
2 回答
5144 浏览

.net - ILMerge 程序集的运行时版本是 v4.0.20926;预期版本为 v4.0.30319

这就是我的 .csproj AfterBuild 的样子:

我正在运行 64 位 Windows。我尝试将 .NET Framework 从更改为...\Microsoft.NET\Framework\......\Microsoft.NET\Framework64\...但没有帮助。

我还在 ILMerge 目录中创建了 ILMerge.exe.config:

为什么 ILMerge 不生成 4.0.30319 程序集?

0 投票
6 回答
58731 浏览

.net - 将 ILMerge 与 .NET 4 库一起使用

两个问题:

1) 基本 .NET 程序集不包含在 ILmerged 程序集中

从 .NET 3.5/Visual Studio 2008 升级到 .NET 4/Visual Studio 2010 后,我在后期构建中使用 ILMerge 时遇到问题。我有一个解决方案,其中包含多个目标框架设置为“.NET Framework 4”的项目. 我使用以下 ILMerge 命令将各个项目 DLL 合并到一个 DLL 中:

如果我不指定 .NET 4 框架目录的位置,我会从 ILMerge 收到“不允许的未解析程序集引用:系统”错误。如果我不指定 MSTest 目录的位置,则会收到“不允许的未解析程序集引用:Microsoft.VisualStudio.QualityTools.UnitTestFramework”错误。

上面的 ILMerge 命令工作并生成一个 DLL。但是,当我在另一个 .NET 4 C# 项目中引用该 DLL 并尝试在其中使用代码时,我收到以下警告:

无法解析主要引用“MyILMergedDLL”,因为它间接依赖于 .NET Framework 程序集“mscorlib,Version=4.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”,它的版本“4.0.65535.65535”高于版本当前目标框架中的“4.0.0.0”。

如果我随后删除该/targetplatform:v4标志并尝试使用 MyILMergedDLL.dll,则会收到以下错误:

'System.Xml.Serialization.IXmlSerializable' 类型是在未引用的程序集中定义的。您必须添加对程序集“System.Xml,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。

看来我不应该这样做。使用我的 MyILMergedDLL.dll API 的人不必添加对它引用的任何库的引用。我怎样才能解决这个问题?

2) TypeLoadException 仅在使用合并程序集时

编辑:除此之外,即使我System.Xml在使用 MyILMergedDLL.dll 的消费者项目中添加了对的引用,使用 MyILMergedDLL.dll 中的一些代码也会产生此异常:

System.TypeLoadException:无法从程序集“MyILMergedDLL,Version=1.0.1.1,Culture=neutral,PublicKeyToken=...”加载类型“System.Func`2”。

这是我的消费者项目中的代码;导致的行TypeLoadException是第二行:

Row抛出的特定构造函数TypeLoadException在公共类中定义MyILMergedDLL,当我在引用单个项目 DLL 时使用此构造函数时,它工作正常。只有当我在引用 IL 合并的 DLL 时使用此构造函数时,我才会得到异常。我不知道发生了什么事。

这是构造函数:

base它所指的有以下代码:

0 投票
1 回答
1174 浏览

c# - 构建单文件应用程序

我正在尝试合并两个文件。其中之一是 .net3.5 wpf 应用程序,另一个是WPF 通知图标 dll

我使用以下命令:

但是当我启动结果程序集时,我的应用程序因此错误而崩溃

EventType:clr20r3 P1:ps.exe
P2:1.0.0.0 P3:4c0ee52f P4:presentationframework P5:3.0.0.0 P6:4938d608 P7:9a1 P8:46 P9:system.io.ioexception

为什么?以及如何构建单个文件应用程序?