0

在很多地方,比如在 app.config/web.config 文件中,我必须使用这个冗长的完全限定名称来指定类型,比如

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

这个 MSDN 网站说,

在 .NET Framework 中引用程序集时,不允许使用仅指定程序集名称的部分绑定。

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

4

2 回答 2

0

我想这部分与此有关:

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

LoadWithPartialName 在 v2 中已被贬值,我认为它在许多地方用于处理配置文件中的程序集名称。

虽然它应该可以工作(它只是折旧,而不是删除),但我想他们在内部对任何调用它的东西进行了更改,包括如何处理配置文件。

于 2009-01-15T20:37:37.607 回答
0

这是一个安全问题。活页夹在查找程序集时遵循一组特定的目录。如果我想恶意破坏您的应用程序,我可以放入一个程序集中,在适当的位置定义您的类型。您的代码将加载这个未签名、不受信任的程序集,并以您的代码运行的任何特权开始执行我的代码。

其次,版本很重要,因为它允许依赖于共享程序集的已部署应用程序安全更新,因为 .net 允许您在 GAC 中为程序集指定更新策略。

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

于 2009-01-15T20:38:55.247 回答