我正在尝试一些探索性的事情:
说我有一个图书馆"coolproject",它有依赖关系one.dll,two.dll和three.dll.
我想用ILMerge到coolproject有机结合起来one.dll,并two.dll但不是three.dll.在合并完成后,我应该coolproject.dll和three.dll.无论我打算使用哪里,coolproject.dll我都必须参考three.dll
这甚至可能吗?每当我尝试它,我得到.Unresolved assembly reference not allowed: three.我省略three.dll了设置"Copy Local"= false.
[编辑]:
执行如下:
ILMerge /targetplatform:v2 /log /internalize /out:bin\coolproject.dll obj\Debug\coolproject.dll C:\Users\Nick\Projects\test\bin\one.dll C:\Users\Nick\Projects\test\bin\two.dll
Run Code Online (Sandbox Code Playgroud)
这不起作用的原因最终变得相当简单:ILMerge必须能够找到您从列表中省略的dll.
在评估目标库中的依赖项时,ILMerge默认会检查各个位置以识别依赖库(\ bin,GAC等),即使您从命令行列表中省略了它.如果找不到此库,则必须使用\lib开关指定其位置.否则你会看到Unresolved assembly reference not allowed: three错误.
例:
ILMerge /lib:..\three\bin\three.dll /targetplatform:v2 /log /internalize /out:bin\coolproject.dll obj\Debug\coolproject.dll C:\Users\Nick\Projects\test\bin\one.dll C:\Users\Nick\Projects\test\bin\two.dll
Run Code Online (Sandbox Code Playgroud)