我有一个C 4.0 WinForm应用程序,我刚从3.5升级到4.0。C 4.0 WinForms应用程序引用C 3.5 dll,该dll将根据用户选择从网络路径加载一系列dll,然后使用System.Reflection创建/调用dll。当应用程序设置为使用3.5作为目标框架时,一切工作都很好。升级后出现此错误:
试图从网络位置加载程序集,这将导致在早期版本的.NET Framework中对程序集进行沙盒处理。默认情况下,此.NET框架版本不启用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 PublicOnly、Boolean NoCheck、Boolean&CanBecached、RuntimeMethodHandleInternal&ctor、Boolean&BneedSecurityCheck)
在System.RuntimeType.CreateInstanceSlow(Boolean PublicOnly、Boolean SkipCheckThis、Boolean FillCache)
在System.RuntimeType.CreateInstanceDefaultctor(Boolean PublicOnly、Boolean SkipVisibilityChecks、Boolean SkipCheckThis、Boolean FillCache)
在System.Activator.CreateInstance(类型类型,布尔非公共)
位于System.RuntimeType.CreateInstanceImpl(bindingFlags bindingAttr、binder binder、object[]args、cultureInfo culture、object[]activationattributes)
在System.Activator.CreateInstance上(类型、bindingFlags bindingAttr、binder binder、object[]args、cultureInfo culture、object[]activationattributes)
位于System.Reflection.Assembly.CreateInstance(字符串类型名、布尔型IgnoreCase、bindingFlags bindingAttr、binder binder、object[]args、cultureInfo culture、object[]activationattributes)
位于system.reflection.assembly.createInstance(字符串类型名)
at architecture.data.transformations.assemblyhelperbase.createInstanceExplicit[T](程序集,字符串类型名)
在architecture.data.transforms.mappingtransform.processmap(字符串映射、字符串路径、IxPathNavigable文档)上
在architecture.data.transforms.mappingtransform.execute(字符串映射、字符串路径、xmlDocument transformedxml)
在architecture.data.transforms.mappingtransform.execute(xmldocument transformedxml,int32 historyid)
在architecture.data.transformations.transformationsdataservice.transformxmlmap(xmlcontext transformedxml,int32 historyid)上
at architecture.data.transformationsdataservice.createpcsxml(历史记录历史记录)
at architecture.data.transformations.transformationsdataservice.reshred(int32 historyID)
内部异常是:该程序集不允许部分受信任的调用程序。
此异常在我从网络位置加载程序集后引发,但我正尝试使用激活器在程序集中创建类型的实例。
protected T CreateInstanceExplicit<T>(Assembly assembly, String typeName)
{
return (T)assembly.CreateInstance(typeName);
}
C 4.0 WinForms应用程序已签名(.snk文件)。
将安全设置作为完全信任应用程序检查后,单击。
我尝试了更改app.config设置和项目设置的组合,甚至删除了签名。为了让Winforms的应用程序保持4.0而不是3.5,我在这里绞尽脑汁想办法解决这个问题。有人能帮忙吗?