2009-01-15 55 views
0

在许多地方,像的app.config/web.config文件中我用这个冗长的完全限定名指定类型,如为什么我必须为本地程序集使用完全合格的程序集名称?

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

This MSDN site说,这

部分装订,其中仅指定 程序集名称,不允许 引用 .NET Framework中的程序集。

好的,很好 - 但为什么在某些地方,比如定义我自己的自定义跟踪侦听器时,我不能使用部分绑定,当我引用自己的非强命名本地部署的程序集时?这有什么更深的理由吗?

回答

0

我想象它的一部分与此有关:

http://blogs.msdn.com/suzcook/archive/2003/05/30/57159.aspx

LoadWithPartialName在V2我假设在许多地方,使用了配置文件处理程序集名称贬值。

尽管它应该起作用(它只是被折旧,而不是被删除),但我想他们在内部对所有调用它的东西进行了更改,包括如何处理配置文件。

+0

谢谢。这让我们了解了一些情况,但是这篇文章似乎在讨论如何使用GAC中的部分名称加载程序集。虽然这对于GAC部署的程序集确实很有意义,但它仍不适用于本地程序集。 – 2009-01-15 20:42:00

+0

就是这样,如果你没有明确指定你想要的组件,融合将会在GAC和其他地方寻找组件。加载程序集就是关于所有这些东西。 – casperOne 2009-01-15 20:48:40

0

这是一个安全问题。当它查找程序集时,绑定器遵循特定的一组目录。如果我想恶意破坏你的应用程序,我可以在一个组件中定义你的类型。您的代码将加载这个未签名的,不受信任的程序集,并开始执行我的代码,并使用您的代码运行的任何特权。其次,版本很重要,因为它允许依赖共享程序集的已部署应用程序得到安全更新,因为.net允许您在GAC程序集中指定更新的策略。

最后,在.net中定义相同类型的两个程序集是完全合法的,这些程序集可能由不同的作者或公司编写,因此完全限定的名称可以保护您的代码不会做错误的事情。

相关问题