有没有人在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‘
合并过程中出现异常:
对象引用未设置为对象的实例。
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次跳过==========
发布于 2010-07-09 03:50:31
在targetplatform中包含4.0 Framework的路径,并确保使用引号。例如,从PowerShell:
.\ILMerge /out:Merged.dll /targetplatform:'v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319' .\Assembly1.dll .\Assembly2.dll发布于 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版本,并从我的旧解决方案中引用它,同时保持其他所有内容不变。(我应该知道这一点,但我很匆忙/没有想清楚,错误消息具有误导性...)。
https://stackoverflow.com/questions/3106855
复制相似问题