是的,它可以。爲了讓CAS能讓你這樣做,你應該在COM程序集和加載程序集中包含
[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]
屬性。 還創建對象和執行組件將需要一個適當的權限集加入到這樣的新的應用程序域:
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = Path.GetDirectoryName(path);
PermissionSet trustPermissionSet = new PermissionSet(PermissionState.Unrestricted);
AppDomain newDomain = AppDomain.CreateDomain("descriptive name", null, setup, trustPermissionSet);
然後,你可以簡單地通過CreateInstanceFromAndUnwrap()
或executeAssembly
創建對象。 還有一種方式可以解決這個問題 - 使用Activator
:
System.Runtime.Remoting.ObjectHandle objHandle = Activator.CreateInstanceFrom(_pluginStore[path], path, pluginClass);
if (objHandle != null)
{
object unwrappedInstance = objHandle.Unwrap();
result.Add(unwrappedInstance);
}
但它的代碼執行後,無權做任何「複雜的東西」。
你可以找到更多here。
你得到了什麼樣的安全異常?我有一個.NET COM LocalServer應用程序工作正常(我不使用GAC)。 – 2009-12-07 08:24:38
請求「System.Security.Permissions.SecurityPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089」類型的權限失敗。當我嘗試AppDomain.executeAssembly()時。 當我嘗試加載FileIOPermission(或類似的)異常時,我得到了一個。 – Revenge 2009-12-07 08:42:33
在創建對象時,我也切換到了COM組件的GAC原因,例如,從c + +代碼我得到了fileNotFound的執行。當我將COM程序集放入GAC時,它工作正常。然後我得到了安全性例外,所以我簽署了我使用的程序集,並嘗試將它們放入GAC中 - 沒有解決。 – Revenge 2009-12-07 08:46:35