我写了一篇我即将发布开源的lib。它使用MS Unity。我是否应该使用ILMerge将Unity DLL(Microsoft.Practices.Unity.dll和Microsoft.Practices.ServiceLocation.dll)合并到OS lib中,我是否应该简单地将DLL与OS DLL一起发送?或者
答案 0 :(得分:2)
我不会合并lib和MS Unity。
由于MS Unity属于Ms-PL许可证,我会发布MS Unity程序集的良好版本以及lib。不要忘记在the license of MS Unity包含readme.txt
文件。
答案 1 :(得分:1)
我不建议您将任何第三方库合并到您的库中。 原因很简单:通过这样做,您可以限制用户使用这些第三方库的其他(或可能是自定义)版本。
我建议将这些DLL与您的库一起发布,只要包含对解决方案的NuGet包引用(如果它是一个开源库)。 这适用于任何第三方库,但对于诸如IoC容器,记录器和其他常用问题,您通常希望为用户提供更大的灵活性。
如果您的图书馆应该被许多人使用,那么您可以预测有人会更喜欢使用另一个容器, 也许,这些其他容器在他们想要开始使用您的库时已经在他们的应用程序中使用。很难想象您的用户会乐意放弃他们使用的内容并开始使用Unity,或者支持两个容器。 我建议你将这些依赖关系抽象出去,并为潜在用户提供一个选择。
例如,在您的库中,您可以使用容器中所需的所有方法(Resolve,Register等)定义接口IContainer。您还可以实现另一个单独的DLL: SuperLibrary.Container.Unity.dll ,它将包含一个通过Unity工作的实现IContainer。 现在,如果我想在我的项目中使用Autofac和你的lib,我将能够创建我自己的SuperLibrary.Container.Autofac.dll,它可能包含一个或两个文件用于你的IContainer实现,并且是一个快乐的用户你的lib是因为我使用我的Autofac并且不需要知道任何关于任何Unity的事情:)
甚至你,如果你决定足够好,你可以为Autofac,Unity,Unity2,StructureMap,Spring.NET等提供单独的dll,让用户可以选择使用哪个库。
答案 2 :(得分:0)
我建议使用NuGet包管理器编写如何获取Unity版本的说明。它应该减少最终用户的头痛。
还提供指向Unity下载页面的链接,并指定兼容的Unity版本列表。