首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成时出现ILMerge错误

生成时出现ILMerge错误
EN

Stack Overflow用户
提问于 2010-06-24 10:27:21
回答 2查看 8.4K关注 0票数 4

有没有人在IlMerge上遇到过这个错误?我正在尝试使用4.0框架为一个.NET项目合并几个程序集。

C:\Development\CJCommon\Libraries\FluentNHibernate.dll C:\Development\CJCommon\Libraries\HibernatingRhinos.Profiler.Appender.dll C:\Development\CJCommon\Libraries\Iesi.Collections.dll C:\Development\CJCommon\Libraries\Microsoft.Practices.ServiceLocation.dll ILMerge C:\ /log \CJCommon C:\Development\CJCommon\Libraries\Microsoft.Practices.ServiceLocation.dll ILMerge/log /lib:..\Libraries /targetplatform:v4 /ndebug /out:bin\Release\Common.dll obj\Release\Common.dll Development C:\Development\CJCommon\Libraries\log4net.dll CJCommon\Libraries\NHibernate.ByteCode.Castle.dll C:\Development\CJCommon\Libraries\NHibernate.dll C:\Development\CJCommon\Libraries\NHibernate.Linq.dll C:\Development\CJCommon\Libraries\StructureMap.dll

将平台设置为'v4',使用mscorlib.dll的目录'C:\Windows\Microsoft.NET\Framework64\v2.0.50727..\v4.0.20107‘

合并过程中出现异常:

对象引用未设置为对象的实例。

代码语言:javascript
复制
 at System.Compiler.CoreSystemTypes.GetSystemAssembly(Boolean doNotLockFile, Boolean getDebugInfo)
 at System.Compiler.CoreSystemTypes.Initialize(Boolean doNotLockFile, Boolean getDebugInfo)
 at System.Compiler.SystemTypes.Initialize(Boolean doNotLockFile, Boolean getDebugInfo)
 at ILMerging.ILMerge.Merge()
 at ILMerging.ILMerge.Main(String[] args)

C:\Program Files (x86)\MSBuild\Ilmerge.CSharp.targets(8,5):error MSB3073:命令""C:\Program Files (x86)\Microsoft\Ilmerge\Ilmerge.exe“”/log /lib:“”..\Libraries“/targetplatform:v4 /internalize:./.exited with code 1...”

..。

==========全部重建:3次成功,1次失败,0次跳过==========

EN

回答 2

Stack Overflow用户

发布于 2010-07-09 03:50:31

在targetplatform中包含4.0 Framework的路径,并确保使用引号。例如,从PowerShell:

代码语言:javascript
复制
.\ILMerge /out:Merged.dll /targetplatform:'v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319' .\Assembly1.dll .\Assembly2.dll
票数 11
EN

Stack Overflow用户

发布于 2020-11-11 02:42:01

我之所以回答这个老问题,是因为我自己在Stack Overflow上没有找到相关问题的答案,这可能会对其他人有所帮助。在我的例子中,我试图在VS2013中修改和重建一个旧的解决方案,以修复安装程序中的一个小故障(没有将IIS10识别为比IIS4更新)。

合并操作给了我一个“系统找不到指定的文件错误代码0x80070002”,如果你忽略了这个错误并安装了应用程序,它将被一个运行时异常卡住。当然,“指定的文件”就在build文件夹中。

这个问题的根本原因是4.0以后的框架一直是“就地升级”,一些依赖项在核心库周围移动(有关长时间的讨论,请参阅:http://www.hurryupandwait.io/blog/what-you-should-know-about-running-ilmerge-on-net-4-5-assemblies-targeting-net-4-0)。简而言之,你可能有几个版本的ilmerge可供你使用,但只有最新的版本才能保证能够准确地解开你的依赖关系,以便在运行时发现一些东西,丢失的不是指定的文件,而是指向底层调用的指针。

在我的例子中,解决方案是找到一个从NuGet检索到的ilmerge版本,并从我的旧解决方案中引用它,同时保持其他所有内容不变。(我应该知道这一点,但我很匆忙/没有想清楚,错误消息具有误导性...)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3106855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档