是否可以仅使用ILMerge合并依赖项的子集?

Nic*_*erb 11 c# ilmerge

我正在尝试一些探索性的事情:

说我有一个图书馆"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)

Nic*_*erb 8

这不起作用的原因最终变得相当简单: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)

  • 如果我尝试在 /lib: 参数中指定一个 DLL,ILMerge 将失败并显示“未找到指定的搜索目录 'C:\a\b\c.dll'”。 (2认同)