例如:我有app A,它引用了库A和库B.此外,库A本身引用了不同版本的库B.(这些都在C#中)
我希望所有引用都指向二进制DLL文件。现在我有一个像这样的lib文件夹:
lib/LibA/v1/LibA_1.dll
lib/LibB/v1/LibB_1.dll
lib/LibB/v2/LibB_2.dll
假设该应用程序引用了LibA v1和LibB v2,但LibA本身依赖于LibB v1。如果可能的话,设置它的“正确”方法是什么?我想避免GAC并尽量减少手动摆弄文件,因为我们的想法是开发人员能够从svn检出应用程序A并构建它而不改变路径/引用,假设他们有lib文件夹树检查出来。
现在我注意到Visual Studio没有将LibA版本的LibB复制到输出目录。文件名是否足够差异,还是我必须更改程序集本身的版本?
答案 0 :(得分:1)
正确的方法是使用ILMerge。编译LibA_1时,使用ILMerge将LibB_1静态合并到LibA_1 dll文件中。然后,您的应用程序将引用LibA_1和LibB_2,而且LibA_1实际上没有将LibB_1嵌入其dll文件中。我之前使用过这种方法,效果很好。
除非您准备升级LibA_1以使用LibB_2,否则这是您唯一的选择。如果LibB_1和LibB_2明显不同,那么升级LibA_1可能会非常耗时。