标签: ilmerge

如何将多个程序集合并为一个?

我使用EXE项目(azure应用程序的启动任务)使用我的服务堆栈,因为我已将以下服务堆栈的DLL和一些Azure的DLL复制到EXE项目中.

dll文件

当我构建这个EXE项目时,Azure DLL将与我的EXE捆绑在一起但服务堆栈的DLL不会与EXE捆绑在一起,因为要在任何机器上运行我的EXE,我需要手动复制所有服务堆栈的DLL.

我已经使用了这个服务栈的dll来使用

JsonServiceClient client = new JsonServiceClient(servicepath);
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能将所有这些DLL捆绑到我的EXE中?

c# ilmerge assemblies exe servicestack

82
推荐指数
6
解决办法
8万
查看次数

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

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

我可以从命令行使用ILMerge执行此操作,但我希望将引用程序集和项目的这种合并集成到Visual Studio项目中.从我的阅读中,我了解到我可以通过MSBuild Task或Target执行此操作,只需将其添加到C#/ VB.NET项目文件中,但我找不到具体的示例,因为MSBuild是一个很大的主题.此外,我找到一些将ILMerge命令添加到Post-build事件的引用.

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

  2. 这如何与可能的ILMerge.Targets文件绑定?

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

msbuild ilmerge visual-studio-2008 visual-studio

74
推荐指数
5
解决办法
6万
查看次数

ILMerge最佳实践

你使用ILMerge吗?您是否使用ILMerge合并多个程序集以简化dll的部署?ILMerging组装后,您是否在生产中发现了部署/版本控制问题?

我正在寻找一些关于使用ILMerge来减少部署摩擦的建议,如果可能的话.

.net c# deployment ilmerge

71
推荐指数
4
解决办法
5万
查看次数

Visual Studio重建未修改的项目

所以,正如标题所示,我现在有一个VS2010解决方案,里面有大约50个项目.如果我对没有引用的"顶级"项目进行更改,那么VS仍会重建所有50个项目.我正在运行Visual Studio 2010 Ultimate而没有任何附加组件.我正在使用ILMerge将所有项目合并到一个文件中.

我已经通过检查较低级别dll的时间戳来验证这一点,并且看到它们确实已经重建,即使它们的代码没有被触及.

我已阅读所有回复和评论:

Visual Studio 2008不断重建

Visual Studio不断构建一切

奇怪的VS2010构建故障发生在我的解决方案中

C#项目在Visual Studio中重建的原因

但是他们中的大多数只提供卸载项目的建议,以加快构建时间,但没有具体的解决方案.我试图弄清楚为什么VS认为这些依赖项目需要在不修复时进行重建.

我已经打开了'工具>选项>项目和解决方案>构建和运行>仅在运行时构建启动项目和依赖项'但没有任何效果.

此外,如果我只是重建一个只有8个(in)直接依赖项的"中级"项目,那么即使没有调用ILMerge并且没有修改任何依赖项目,它仍会构建所有8个项目.

感谢大家提供的任何见解.

添加

为了测试一些建议,我从头开始创建一个新的WinForms项目.然后我在该解决方案中创建了两个新项目.我将所有代码和资源(不是项目文件)从我的两个"最低级别"项目复制到两个全新的项目中(我通过将资源管理器中的文件和文件夹放到Visual Studio中的项目中来完成此操作).

最低的项目,我们称之为B,没有引用任何其他项目.下一个项目A仅引用了B. 因此,一旦我将所需的.NET和外部程序集引用添加到项目中,那么解决方案就会构建.

然后,我获得了我的新WinForm项目参考A并完成了完整版本.所以ref链是:

WinForm - > A - > B.

然后我修改了WinForm 并进行了标准构建(F6).和以前一样,Visual Studio重建了所有三个项目.

源文件在项目中的某些系统eleminiation后我发现,如果我打消了我Resources.Designer.csResources.resx(并评论指出,利用了的代码.Properties.Resources对这些资源的对象),然后修改的WinForm将不再重建整个解决方案,只会重建WinForm.

添加Resources.resxResources.Designer.cs返回项目B(但保留引用的代码,以便没有任何东西利用资源)将重新引入完整的构建行为.

要查看我的资源文件是否已损坏,我再次删除它们,然后创建一个新文件(通过Project Properties - > Resources)并重新添加与以前相同的资源,这是一个单独的Excel文件.使用此设置,仍将进行完全重建.

然后我删除了单个资源,但将资源文件保留在项目B中.即使没有添加资源,但资源文件仍在项目中,也会发生完全(不需要的)重建.

看起来只是将资源文件添加到(.NET 3.5)项目中将导致Visual Studio 2010始终重建该项目.这是一个错误或预期/预期的行为?

再次感谢所有人!

c# msbuild ilmerge visual-studio-2010 visual-studio

65
推荐指数
5
解决办法
3万
查看次数

使用wpf将dll合并为单个.exe

我目前正在开发一个我们有很多依赖项目的项目.我想将所有引用的dll编译成.exe,就像使用嵌入式资源一样.我已经尝试过ILMerge但它无法处理.xaml资源.

所以我的问题是:有没有办法将WPF项目与多个依赖项合并为一个.exe?

c# wpf dll ilmerge

55
推荐指数
6
解决办法
4万
查看次数

将DLL合并到EXE中?

我有两个DLL文件,我想包含在我的EXE文件中,以便更容易分发它.我在这里和那里读了一些如何做到这一点,甚至在这里找到了一个好的线程,在这里,但它对我来说太复杂了,我需要关于如何做到这一点的真正基本指令.

我正在使用Microsoft Visual C#Express 2010,请原谅我的"低标准"问题,但我觉得我比其他人的经验低一两级: - /如果有人可以指出如何将这些DDL文件合并到我的EXE在一步一步的指导中,这真的很棒!

c# dll merge ilmerge

52
推荐指数
8
解决办法
9万
查看次数

使用ILMerge和.NET 4库

两个问题:

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

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

if not $(ConfigurationName) == Debug
  if exist "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
    "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
      /lib:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
      /lib:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"
      /keyfile:"$(SolutionDir)$(SolutionName).snk"
      /targetplatform:v4
      /out:"$(SolutionDir)bin\development\$(SolutionName).dll"
      "$(SolutionDir)Connection\$(OutDir)Connection.dll"
      ...other project DLLs...
      /xmldocs 
Run Code Online (Sandbox Code Playgroud)

如果我不指定.NET 4框架目录的位置,我会从ILMerge得到"Unresolved assembly reference not allowed:System"错误.如果我不指定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 = …

.net dll ilmerge assemblies c#-4.0

51
推荐指数
2
解决办法
6万
查看次数

ILMerge挂起合并

我正在使用ILMerge来组合使用C#.NET 4编写的9个.NET DLL.问题是ILMerge卡住了,没有错误消息或任何东西.

日志显示ILMerge正确合并所有程序集,然后设置为编写目标程序集.它运行程序集解析器为一堆引用,然后..没有.成功解析System.Configuration后,日志不会显示任何其他内容.

该程序继续使用CPU,但我不知道它是否正在做任何事情.

其他人有类似的经历吗?

.net ilmerge

41
推荐指数
1
解决办法
5612
查看次数

ILMerge DLL:程序集未正确合并,仍列为外部引用

在.NET C#工具的构建过程中,我一直在使用ILMerge将程序集合并到一个exe中.

我最近添加了一个新的类库,现在ILMerge失败了.我记得要告诉它合并新的DLL!

它现在给我这个错误,我真的不明白:

ILMerge.Merge:程序集"DataObjects"未正确合并.它仍然在目标程序集中列为外部引用.

我使用"项目"引用完成的所有程序集引用,并且它在过去没有失败.

任何人都可以为我解释这个错误,或建议一个解决方法吗?

c# ilmerge build-process assemblies

36
推荐指数
2
解决办法
1万
查看次数

有没有办法将pdb文件与ilmerge合并?

由于各种原因,我们使用ilmerge将所有应用程序集合放入一个文件中,因此用户只需处理一个文件.不幸的是,似乎没有办法将.pdb文件与程序集合并.有谁知道解决这个问题的方法?

.net c# ilmerge

21
推荐指数
1
解决办法
6992
查看次数