让我澄清一下:
我已经构建了一个用于多个项目的类库。作为此DLL的一部分,我想通过扩展CookieAuthenticationProvider为Owin Cookie添加一些不同的自定义提供程序,因此我需要包含对Microsoft.Owin.Security.Cookies的引用。这是安全的,因为将使用我的库的较新项目也使用Microsoft.Owin.Security.Cookies。
然而,有些项目较旧,并且不使用Owin等...如果我将库包含在其他用途中会不会爆炸?或者,如果我尝试使用提供者,他们只会爆炸(我不会因为他们无法使用提供者)。
我想在我的库中放入一些常用的东西,而不必将每个依赖的DLL引用到每个使用它们的项目中。我很确定我所做的事情还可以,但是我希望somone可以在我浪费很多时间之前告诉我。如果我有更好的方式,那么我的耳朵也会更好。
答案 0 :(得分:7)
规则:
Microsoft.Owin.Security.Cookies
程序集中找到的类型,然后其他程序集可以使用您的DLL安全地编译而无需引用该程序集。Microsoft.Owin.Security.Cookies
的其他程序集也不会调用程序集中的任何代码然后依次尝试要调用Microsoft.Owin.Security.Cookies
中的代码,该程序集不需要在运行时出现。关于第二点的棘手部分是“Microsoft.Owin.Security.Cookies
中的调用代码”的构成并不总是很清楚。通常,只要您根本不访问程序集中的类型,.NET就不会尝试执行该程序集中的任何代码。但即使不一定需要它们,也不难意外地访问这些类型(例如在初始化程序,static
或其他方面,检查接口实现的代码等)。
如果您真的希望您的客户能够使用引用Microsoft.Owin.Security.Cookies
的DLL,而不需要在运行时出现该DLL,那么您需要非常小心以确保完全支持那个场景。这是可能的,但也不难犯错误。
(我不得不承认,我很惊讶这个有用的问题还没有在Stack Overflow上得到解决。看起来它现在已经出现了。但我无法找到重复,因此答案如果有人知道我忽略了重复,我欢迎任何适当的通知。)