引用被引用的DLL需要的DLL应该是哪个项目的责任?

时间:2018-11-27 12:50:42

标签: c# dll

浏览Web配置文件中的大型解决方案(50多个项目),我已经开始维护它们,我看到的参考模式我不太了解

此解决方案中的至少10个项目发送电子邮件,因此依赖于另一个产生Mailing.dll的项目(也在该解决方案中)

该Mailing项目又使用Azure队列和其他一些东西。邮件解决方案引用了Microsoft.WindowsAzure.Storage,但没有引用Microsoft.WindowsAzure.Diagnostics(以下称为WA.D)

我在使用Mailer / send电子邮件的10个项目中看到,引用包括WA.D的各种版本和源位置,并且每个Web配置文件都具有WA.D的绑定重定向。看到有关选择或无法选择版本的编译警告

如果我从10个项目中删除了引用,并删除了绑定重定向,我会死于ASP.NET黄屏,抱怨它找不到WA.D.dll,这是预期的,因为它意识到了WA.D.dll不在输出bin目录中的情况。在我所看到的所有情况下,YSOD都将对mailer.dll方法的调用称为失败点,但调试进入邮件程序的调试程序最终会到达对某些与Windows天蓝色有关的队列操作的调用

现在,如果我从Mailer项目中引用WA.D.dll,那么一切都会再次起作用:Mailer构建,出现WA.D dll的唯一版本,其他项目运行,没有关于多个构建投诉程序集的版本。 Mailer确实是依赖于WA.D的dll的东西

这10个项目似乎对WA.D本身没有直接依赖

因此,我有些困惑,为什么原始开发人员不会在Mailer上设置WA.D的引用(最直接使用它的东西),而是在N个(至少10个)其他项目上设置引用,这需要Mailer,但这样做会导致大量版本混乱,甚至出现不一致的绑定重定向(某些重定向会指向2.9到2.2 dll的请求)

这种方法是否有优势(使用邮件程序的顶级项目,负责引用WA.D),或者我应该进行切换,以使最低级别的DLL(邮件程序)负责引用其程序集。需要吗?

这个项目是否由于azure SDK的特殊之处而相对孤立?

ps;如果相关的话,由于我们在未安装Azure SDK的部署目标方面遇到问题,我正在使用一组非官方的NuGet程序包,这些程序包仅包含此项目所需的特定Azure DLL。某些原因可能是由于这些DLL尚未正式独立提供

编辑:

解决方案资源管理器的缩写表示形式:

现在:

Website1
+-References
  +-WindowsAzure.Diagnostics
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Website2
+-References
  +-WindowsAzure.Diagnostics
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Website3
+-References
  +-WindowsAzure.Diagnostics
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Mailer --seems to be what really requires windowsazure.diagnostics
+-References
 +-WindowsAzure.Storage 



Also seems to work:

Website1
+-References
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Website2
+-References
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Website3
+-References
  +-Mailer
+-Web.config --dependency/redirect to windowsazure.diagnostics

Mailer
+-References
 +-WindowsAzure.Storage
 +-WindowsAzure.Diagnostics
 +-app.config

0 个答案:

没有答案