ava*_*ime 6 .net ilmerge .net-assembly
尝试在VS Post Build中合并多个程序集时遇到了问题:
ILMerge version 2.13.307.0
Copyright (C) Microsoft Corporation 2004-2006. All rights reserved.
ILMerge /out:Assembly.dll AssemblyA.dll AssemblyB.dll /targetplatform:v2,C:\Windows\Microsoft.NET\Framework\v3.5 /log:log.txt
Set platform to 'v2', using directory 'C:\Windows\Microsoft.NET\Framework\v3.5' for mscorlib.dll
An exception occurred during merging:
Unable to cast object of type 'System.Compiler.Class' to type 'System.Compiler.Struct'.
at System.Compiler.SystemTypes.Initialize(Boolean doNotLockFile, Boolean getDebugInfo, PostAssemblyLoadProcessor postAssemblyLoad)
at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)
AssemblyA是当前项目输出$(TargetFileName),AssemblyB是引用的程序集.
奇怪的是,当我更改命令以使用.NET 4时,它可以工作:
ILMerge /out:Assembly.dll AssemblyA.dll AssemblyB.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /log:log.txt
Run Code Online (Sandbox Code Playgroud)
由于我希望合并的程序集是版本3.5而不是4,如何让前一个命令工作或如何解决此错误?
Han*_*ant 10
使用目录'C:\ Windows\Microsoft.NET\Framework\v3.5'为mscorlib.dll
看一下,该目录不包含mscorlib.dll.根本没有太多,.NET Framework版本3.0,3.5和3.5SP1不包含新的运行时版本.CLR,抖动和许多基本组件仍然是v2.0.这些后续版本的唯一区别是添加了程序集.
所以必需的选项是 /targetplatform:v2,C:\Windows\Microsoft.NET\Framework\v2.0.50727
Fwiw,当你以.NET 4.x为目标时,要非常非常小心,c:\ windows\microsoft.net目录不再是引用程序集的主目录.现在位于c:\ program files(x86)\ reference程序集中.当机器安装了.NET 4.5+时,出错可能会导致极难诊断运行时错误.现在,您选择哪个特定的子目录确实很重要.
| 归档时间: |
|
| 查看次数: |
3321 次 |
| 最近记录: |