簡體   English   中英

由於CAS的排除,C#3.5 winforms app升級到C#4.0問題

[英]C# 3.5 winforms app upgraded to C#4.0 issue because of the exclusion of CAS

我有一個C#4.0 Winform應用程序,我剛剛從3.5升級到4.0。 C#4.0 Winforms應用程序引用一個C#3.5 dll,它將根據用戶選擇從網絡路徑加載一系列dll,然后使用System.Reflection創建/調用dll。 當應用程序設置為使用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.RuntimeType.CreateInstanceSlow的System.RuntimeTypeHandle.CreateInstance(RuntimeType類型,Boolean publicOnly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandleInternal&ctor,Boolean&bNeedSecurityCheck)中,System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)(Boolean publicOnly) ,布爾值skipVisibilityChecks,布爾skipCheckThis,布爾fillCache)System.Activator.CreateInstance(Type type,Boolean nonPublic)at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes)at System.Activator.CreateInstance(Type類型,BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes)在System.Reflection.Assembly.CreateInstance(String typeName,Boolean ignoreCase,BindingFlags bindingAttr,Binder binder,Object System.Refle中的[] args,CultureInfo culture,Object [] activationAttributes) 位於Architecture.Data.Transformations.MappingTransform.ProcessMap(String map,String path,IXPathNavigable doc)的Architecture.Data.Transformations.AssemblyHelperBase.CreateInstanceExplicit [T](Assembly assembly,String typeName)中的.sesembly.CreateInstance(String typeName)at在Architecture.Data.Transformations.TransformationsDataService.TransformXmlMap(XmlDocument transformedXml,Architecture.Data .Transformations.MappingTransform.Execute(XmlDocument transformedXml,Int32 historyID)的Architecture.Data.Transformations.MappingTransform.Execute(String map,String path,XmlDocument transformedXml)位於Architecture.Data.Transformations.TransformationsDataService.ReShred(Int32 historyID)的Architecture.Data.Transformations.TransformationsDataService.CreatePCSXml(HistoryRecord historyRecord)的Int32 historyID)

內部異常是:該程序集不允許部分信任的調用者。

我從網絡位置加載程序集后拋出此異常,但我嘗試使用Activator在程序集中創建類型的實例。

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。 有人可以幫忙嗎?

您的<loadFromRemoteSources>元素無效。 它在MSDN文檔中明確指出:

僅當禁用代碼訪問安全性(CAS)時,此元素的enabled屬性才有效。

你啟用了CAS。 運行Caspol.exe以將信任分配給網絡位置。 說明在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM