没有强名称的程序集引用问题

12

有没有一种方法可以在没有强名称的情况下引用库? 当我在引用中添加对程序集的引用并重新构建解决方案时,一切都很好,但是当我从该程序集解决方案调用类时,它无法构建。

输出显示引用的程序集应具有强名称。最佳解决方案是什么?不建议为库提供强名称。

2个回答

16

我认为你在这里遇到的问题是,你尝试从一个使用强名称进行签名的程序集中添加引用,但你正在尝试引用的那个程序集没有被签名。只有强名称程序集才能引用其他强名称程序集。

要么给你正在引用的程序集签名,要么不要给包含引用的程序集进行签名。

错误之所以仅在实际调用类时出现,是因为如果没有代码实际调用引用的程序集,编译器将从编译输出中剥离该引用。

如果真的无法给被引用的程序集添加强名称或者从进行引用的程序集中移除强名称(抱歉,话说得有点多),那么你将不得不通过反射来动态绑定该类,然后通过一个公共基类或接口访问它——这并不理想;甚至更糟糕的是,通过反射或dynamic来实际调用它。


11
强名称的核心意义在于您知道哪些 DLL 正在被加载。如果您引用了未经强命名的内容,则无法将强名称添加到您的 DLL 中,因为任何东西都可能代替您所想的 DLL 被加载(只要名称匹配)。这完全破坏了强名称所要提供的保证。
因此,您可以执行以下之一
  • 不要为您的 dll 添加强名称(对于大多数内部事物,您只需不需要一个)
  • 或;使用强名称重新构建您正在引用的 dll
  • 或;仅通过反射来加载附加的 dll (呸)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接