Почему я должен использовать полное имя сборки для локальных сборок? - PullRequest
0 голосов
/ 15 января 2009

Во многих местах, например в файлах app.config / web.config, я должен указывать типы, используя эти подробные полные имена, например

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

Этот сайт MSDN говорит, что

Частичная привязка, которая указывает только Название сборки не допускается при ссылке на сборки в .NET Framework.

Хорошо, хорошо - но почему в некоторых местах, например, при определении собственного настраиваемого прослушивателя трассировки, я не могу использовать частичное связывание, когда ссылаюсь на свои собственные, не строго названные, локально развернутые сборки? Есть ли для этого более глубокая причина?

Ответы [ 2 ]

0 голосов
/ 15 января 2009

Это проблема безопасности. Связыватель следует за определенным набором каталогов, когда ищет сборку. Если бы я хотел взломать ваше приложение злонамеренно, я мог бы поместить его в сборку, которая определила ваш тип в соответствующем месте. Ваш код загрузит эту неподписанную ненадежную сборку и начнет выполнять мой код с любой привилегией, с которой работает ваш код.

Во-вторых, важна версия, поскольку она позволяет безопасно обновлять развернутое приложение, основанное на общих сборках, поскольку .net позволяет указывать обновленную политику для сборки в GAC.

Наконец, в .net совершенно законно иметь две сборки, определяющие один и тот же тип, которые могли быть написаны разными авторами или компаниями, поэтому полное имя защищает ваш код от неправильных действий.

0 голосов
/ 15 января 2009

Я думаю, что часть этого имеет отношение к этому:

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

LoadWithPartialName устарела в v2, который, как я полагаю, использовался в ряде мест для обработки имен сборок в файлах конфигурации.

Хотя это должно работать (это только амортизировалось, но не удалялось), я думаю, что они внесли изменения внутренне во все, что его вызывало, включая способ обработки файлов конфигурации.

...