【发布时间】:2020-04-25 08:34:29
【问题描述】:
我创建了一个 C# 解决方案(我们称之为“ServiceProviderLib”),它由几个具有解决方案内部程序集引用/依赖项的类库组成。该解决方案只有一个类库,它公开了一个公共接口,旨在被其他一些应用程序用作 api。
A(public) ---取决于---> B ---取决于---> C.
现在我正在开发一个应用程序(我们称之为“ServiceUserApp”),它应该动态链接到“ServiceProviderLib”的 api。
应用程序---取决于---> A.
为了解决对“ServiceProviderLib”的依赖,我使用了 AppDomain.CurrentDomain.AssemblyResolve 的处理程序。
我原以为我只需要解决对 A 的依赖关系。因为 ServiceProviderLib 应该自己解决其内部依赖关系。
但是对于应用程序,我必须将所有依赖项单独解析为 A + B + C。
有没有办法避免这种情况?
关于问题背景的一些信息: 我知道使用静态/动态链接/解析库有很多优点和缺点。
更准确地说,关于我所说的静态/动态:
静态: 在应用程序中,我将引用库 A,并将 Visual Studio 属性“本地副本”设置为默认值“true”。这将导致生成目录中的 dll 副本。在这种情况下,无需手动解析 dll。
动态: 在应用程序中,我将引用库 A 并将 Visual Studio 属性“Local Copy”明确设置为值“false”。在这种情况下,dll 将不会被复制到构建目录...并且必须在运行时解析。
我使用这两种变体很长一段时间,并体验到动态链接在我的特殊环境中导致的问题更少。因此我决定坚持动态。
【问题讨论】:
标签: c# .net-assembly dependency-management