标签: ilmerge

如何合并 WPF 应用程序的程序集?

我尝试在基于 WPF 的项目(VS2010、Net4.0)上使用 ILMerge,但无法运行合并的可执行文件。所以我创建了两个非常简单的项目

  • 只是一个打印出hello world的控制台应用程序
  • wpf 应用程序,显示带有 hello world 标签的窗口

编译每个项目后,我得到一个可执行文件(所以合并,并没有真正合并任何东西,它只是为了测试)。每个可执行文件当然都有效。

然后我以这种方式“合并”每个可执行文件:

"C:\Program Files\Microsoft\ILMerge\ilmerge" 
    /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 
    /lib:c:\Windows\Microsoft.NET\Framework\v4.0.30319\wpf 
    /out:Merged.exe MyApplication.exe
Run Code Online (Sandbox Code Playgroud)

(我只是为了可读性而调用了多行)。好的,现在控制台应用程序合并并像以前一样运行,wpf 应用程序合并没有任何错误,但我无法运行它。我的意思是,我打字

Merged.exe
Run Code Online (Sandbox Code Playgroud)

任务栏闪烁,但什么也没有显示——没有窗口,没有错误,什么也没有。

那么我应该如何合并 WPF 应用程序?

c# wpf ilmerge

5
推荐指数
1
解决办法
4466
查看次数

为什么这个ilmerge命令不起作用?

我有这个ilMerge命令:

"C:\Repositories\trunk\utilities\ILMerge\ILMerge.exe" /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /closed /target:winexe /ndebug /out:C:\TestReferences\TestReferences_Merged.exe "C:\TestReferences\TestReferences\bin\Release\TestReferences.exe"
Run Code Online (Sandbox Code Playgroud)

并且没有引用,但即使有编译的.exe也没有运行.即使这个命令适用于我所有的其他项目....

c# ilmerge

5
推荐指数
1
解决办法
529
查看次数

ILMerge 程序集未正确合并

我正在使用 ILMerge 版本 2.11.1103.0 将 4 个 DLL 合并到一个新程序集中。假设他们分别称为A、B、C、D,那么他们的关系如下:

B -> A
C -> A
D -> A
D -> C
Run Code Online (Sandbox Code Playgroud)

当我在 A、B 和 C 上运行 ILMerge 时,一切都运行得很好。但是当我添加 DI 时收到以下错误:

An exception occurred during merging:
ILMerge.Merge: The assembly 'A' was not merged in correctly.
It is still listed as an external reference in the target assembly.
   at ILMerging.ILMerge.Merge()
   at ILMerging.ILMerge.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)

我已尝试使用 /close 选项,如此处所示ILMerge DLL: Assembly not merged in正确,仍列为外部引用,但不幸的是它没有帮助:

In order to close the target assembly, the number …
Run Code Online (Sandbox Code Playgroud)

c# ilmerge build-process build .net-assembly

5
推荐指数
1
解决办法
7251
查看次数

如何将F#和C#程序集与ILMerge合并,以便在引用时所有类型都可用?

我有很多F#和C#项目的解决方案.我的目标是使用ILMerge将它们全部合并到一个库中.生成的合并dll将放在NuGet包中,并在其他项目中引用.但是,当在F#项目中引用合并的dll时,我遇到了一些问题.

我遇到的问题是,如果给予ILMerge的主要程序集是F#,那么在F#项目中引用结果dll只允许访问F#类型.如果选择C#dll作为合并的主程序集,则在F#项目中引用时,合并的F#程序集中的扩展方法不可用.AutoOpen打开封闭命名空间时,不再隐式打开具有属性的模块.

有没有办法合并F#和C#程序集,以便所有类型(包括扩展方法)都可用?

c# f# ilmerge

5
推荐指数
1
解决办法
627
查看次数

使用同一库的两个不同版本

我正在开发一个小型库,将在多个应用程序中使用。我想在我自己的库中使用一些第三方库(例如log4Net、实体框架等)。我想我可以将 DLL 与我自己的库一起部署,或者使用 ILMerge 创建单个 DLL(我对 ILMerge 知之甚少,从未尝试过)。

我担心如果使用我的库的应用程序也使用我将使用的相同第三方库会发生什么。例如,如果我使用 log4Net 版本 1.2,而消费应用程序使用 log4Net 版本 1.0,我是否会遇到某种冲突,或者只有一个版本的程序集无法加载?

ILMerge 会阻止这种情况吗?在开发具有第三方依赖项的库时,通常如何解决这个问题?

.net c# ilmerge

5
推荐指数
1
解决办法
3219
查看次数

指定要与 MSBuild.ILMerge.Task 合并的文件

我有一个创建多个 .dll 和 .exe 文件的解决方案。我现在想将一些 .dll 文件与可执行文件合并。我发现了 MSBuild.ILMerge.Task NuGet 包,它默认将所有 .dll 文件合并到可执行文件中。这工作正常。

但我只想包含一些 .dll 文件,因为其他文件在多个可执行文件之间共享。我查看了 ILMerge.props,但无法指定合并哪些 .dll 文件。

使用 MSBuild.ILMerge.Task 包时如何指定输入文件?

c# msbuild ilmerge

5
推荐指数
1
解决办法
4898
查看次数

ILMerge.Task 不允许未解析的程序集引用

我已经MSBuild.ILMerge.Task使用安装到我的项目中Nuget。当我尝试构建我的项目时,出现错误:

错误:不允许未解析的程序集引用:ICSharpCode.SharpZipLib。

我到处搜索但找不到任何有用的东西......

如何修复此错误?

c# msbuild ilmerge task msbuild-task

5
推荐指数
1
解决办法
1783
查看次数

ILMerge 目标平台到 4.6.2 问题

我正在尝试使用 ILMerge.exe 将几个 dll 合并到一个 dll 中。我之前能够将目标平台设置为“v4”来做到这一点。现在,我需要使用以下命令将 2 个 dll 合并为 1 个 dll,目标平台为“4.6.2”。

C:\Program Files (x86)\Microsoft\ILMerge>ilmerge /targetplatform:"v4.6.2,C:\Windows\Microsoft.NET\Framework64\v4.0.30319" /log /out:Test.merged.dll myfirst.dll mysecond.dll
Run Code Online (Sandbox Code Playgroud)

我收到“平台‘v4.6.2’无法识别”的消息。错误。我已经在我的机器上安装了 4.6.2 框架。但是我没有看到 4.6.2 的文件夹结构,就像我看到的 4 一样,如“ C:\Windows\Microsoft.NET\Framework64\v4.0.30319

任何建议将不胜感激。

c# dll ilmerge

5
推荐指数
0
解决办法
1477
查看次数

ILMerge - 与 dll 关联的 pdb 已过期

尝试在 ILMerge 的帮助下构建包含所有库的可执行文件:

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe" MyScan.exe DirectShowLib.dll Google.Apis.Auth.dll Google.Apis.Auth.PlatformServices.dll Google.Apis.Core.dll Google.Apis.dll Google.Apis.PlatformServices.dll Google.Apis.Sheets.v4.dll log4net.dll Newtonsoft.Json.dll zxing.dll zxing.presentation.dll /out:MyScan2.exe
Run Code Online (Sandbox Code Playgroud)

得到错误 dll 之一已过时:

An exception occurred during merging:
ILMerge.Merge:  There were errors reported in Google.Apis.Auth's metadata.
        The pdb associated with c:\Projects\Myscan\MYScan\bin\Release\Google.Apis.Auth.dll is out of date.
   at ILMerging.ILMerge.Merge()
   at ILMerging.ILMerge.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)

这是什么意思?为什么Google.Apis.Auth.dllpdb 已过时以及如何解决?我已经清理并重建了项目,但这没有帮助。

UPD

我不得不删除所有与 google api 相关的 pdb。之后我得到了错误:

Unresolved assembly reference not allowed: System.Core.
   at System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly)
   at System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type)
   at System.Compiler.Ir2md.WriteTypeDefOrRefEncoded(BinaryWriter target, TypeNode type)
   at System.Compiler.Ir2md.WriteTypeSignature(BinaryWriter target, TypeNode …
Run Code Online (Sandbox Code Playgroud)

c# ilmerge google-api pdb-files

5
推荐指数
1
解决办法
1392
查看次数

合并 Newtonsoft.Json 时出现 System.OutOfMemoryException

我正在创建一个插件来调用网络服务。我需要序列化和反序列化 Json 对象。所以,我需要 Newtonsoft.Json。我正在尝试在 Visual Studio 2015 中使用 ILMerge.MSBuild.Task 和 ILMerge 合并来自 NewtonSoft.Json 的 dll 和我的应用程序 dll。

我收到以下错误: 在此处输入图片说明

我在互联网上寻找解决方案,但找不到任何解决方案。

plugins ilmerge dynamics-crm json.net dynamics-365

5
推荐指数
1
解决办法
1748
查看次数