У меня есть приложение C # 4.0 Winform, которое я только что обновил с 3.5 до 4.0.Приложение Winforms C # 4.0 ссылается на dll C # 3.5, который будет загружать серию dll из сетевых путей на основе пользовательских выборок, а затем создавать / вызывать dll с помощью System.Reflection.Все работало просто отлично, когда приложение было настроено на использование 3.5 в качестве целевой платформы.Я получил эту ошибку после обновления:
Была предпринята попытка загрузить сборку из сетевого расположения, что вызвало бы «песочницу» сборки в предыдущих версиях .NET Framework.Этот выпуск .NET Framework по умолчанию не включает политику CAS, поэтому эта загрузка может быть опасной.Если эта загрузка не предназначена для песочницы сборки, включите переключатель loadFromRemoteSources.См. http://go.microsoft.com/fwlink/?LinkId=155569 для получения дополнительной информации.
Это происходит, когда я пытаюсь загрузить сборку из сетевого пути:
var assembly = Assembly.LoadFile(path);
В ходе некоторых исследований я обнаружил, что CAS был«вид» устранен в версии 4.0.Мне посоветовали поместить следующие записи в мой app.config:
<runtime>
<loadFromRemoteSources enabled="true"/>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
Теперь я получаю исключение:
Исключение было сгенерировано целью вызова.на System.RuntimeTypeHandle.CreateInstance (типа RuntimeType, Boolean, Boolean publicOnly NOCHECK, Boolean & canBeCached, RuntimeMethodHandleInternal & CTOR, Boolean & bNeedSecurityCheck) в System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean, Boolean skipCheckThis fillCache) в System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) в System.Activator.CreateInstance (Тип тип, Boolean nonPublic) в System.RuntimeType.CreateInstanceImpl (BindingFlags bindingAttr, связыватель связующего объекта, объектная культура], атрибуты [Object]] атрибутыSystem.Activator.CreateInstance (тип Type, BindingFlags bindingAttr, связыватель Binder, аргументы Object [], CultureInfo culture, Object [] активацииAttributes) в System.Reflection.Assembly.CreateInstance (имя типа String, логическое значение ignoreCase, привязка объекта BindingFlags, связыватель, связыватель[] args, CultureInfo culture, Object [] activAttributes) в System.Reflection.Assembly.CreateInstance (String typeName) в Architecture.Data.Transformations.AssemblyHelperBase.CreateInstanceExplicit [T] (сборка сборки, String typeName) в Architecture.Data.Transformations.MappingTransform.ProcessMap (отображение строки, путь строки, IXPathNavigable)Architecture.Data.Transformations.MappingTransform.Execute (Строковая карта, Строковый путь, XmlDocument transformedXml) в Architecture.Data.Transformations.MappingTransform.Execute (XmlDocument transformedXml, Int32 historyID) в Architecture.Data.Transformations.TransformationsDataService.TransformXMLM (TransformXML)History32) в Architecture.Data.Transformations.TransformationsDataService.CreatePCSXml (HistoryRecord historyRecord) в Architecture.Data.Transformations.TransformationsDataService.ReShred (Int32 historyID)
Внутреннее исключение: эта сборка не допускаетчастично доверенные абоненты.
Это исключение выбрасывается ПОСЛЕ того, как я загрузил сборку изв сети, но я пытаюсь использовать активатор для создания экземпляра типа в сборке.
protected T CreateInstanceExplicit<T>(Assembly assembly, String typeName)
{
return (T)assembly.CreateInstance(typeName);
}
Приложение Winforms C # 4.0 подписано (файл .snk).Нажмите Как только параметры безопасности будут отмечены как приложение с полным доверием.Я пробовал сочетания изменения настроек app.config и настроек проекта, даже удаляя подпись.Я нахожусь в своем уме, пытаясь выяснить, что я могу сделать, чтобы приложение winforms оставалось 4.0 вместо 3.5.Кто-нибудь может помочь?