Замена вызова Assembly.LoadFrom (String, Evidence) на Assembly.LoadFrom (String) - .NET 4 - PullRequest
0 голосов
/ 26 июля 2011

Я должен переместить старый код .NET 2 в проект .NET 4.Он имеет следующую строку:

`return Assembly.LoadFrom(filePath, Assembly.GetExecutingAssembly().Evidence);`

Как сказано в Microsoft ( MSDN ):

Примечание. Этот API устарел.Не устаревшей альтернативой является LoadFrom (String).

Я не знаком с классом Evidence.Каков риск простого удаления параметра Evidence из вызова?Каков реальный случай, когда необходим параметр Evidence?

Заранее спасибо за помощь

1 Ответ

2 голосов
/ 26 июля 2011

Аргумент доказательства использовался для предоставления данных, которые механизм политики безопасности доступа к коду (CAS) мог бы использовать при принятии решения о том, какие разрешения CAS следует предоставить загружаемой сборке. Однако в .NET 4.0 «голый» CLR больше не использует политику CAS (http://blogs.msdn.com/b/shawnfa/archive/2010/02/24/so-is-cas-dead-in-net-4-or-what.aspx, http://blogs.msdn.com/b/shawnfa/archive/2009/06/12/clr-v4-security-policy-roundup.aspx),, поэтому использование доказательств в API устарело. Обычно существует только две причины, по которым можно предоставили подтверждение в вызове LoadFrom в коде, предназначенном для более ранней версии .NET:

  1. Чтобы разрешить сборке работать с большим количеством разрешений, чем могло бы быть предоставлено, или
  2. Чтобы ограничить разрешения сборки, удалив разрешения, которые в противном случае были бы предоставлены в соответствии со свидетельством по умолчанию для сборки.

Для # 1 вам, вероятно, нечего делать в .NET 4.0, поскольку весь код будет работать с неограниченными разрешениями CAS (иначе говоря, «полное доверие») по умолчанию. Для # 2 рекомендуется использовать изолированную область приложения appdomain .

...