2012-05-10 26 views
4
,測定域的身份

我得到「無法確定域的身份」使用通過COM互操作System.IO.Packaging程序時,有兩種描述爲什麼發生這種情況了幾篇文章和解決方案是在自己的AppDomain中運行違規函數。無法使用System.IO.Packaging程序

所以我拿了樣本代碼,看起來像下面的樣子,但我仍然得到錯誤,我想知道我在做什麼錯誤,並且VS 2010中它說AddAssembly和AddHost已經過時 - 我不知道這是否意味着他們不再實現,但如果這是我真的不明白如何使用新方法(AddAssemblyEvidence和AddHostEvidence)?

AppDomainSetup setup = new AppDomainSetup(); 
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; 

Evidence evidence = new Evidence(AppDomain.CurrentDomain.Evidence); 
evidence.AddAssembly(Assembly.GetExecutingAssembly().FullName); 
evidence.AddHost(new Zone(SecurityZone.MyComputer)); 

AppDomain domain = AppDomain.CreateDomain("BlobPackage", evidence, setup); 

BlobPackage blob_interal = (BlobPackage)domain.CreateInstanceAndUnwrap(typeof(BlobPackage).Assembly.FullName, typeof(BlobPackage).FullName); 

blob_interal.pack(FilePath, RootPath, m_source_files); <-- STILL FAILS 

AppDomain.Unload(domain); 
+1

您可以使用新的方法是這樣的: 'evidence.AddAssemblyEvidence(新ApplicationDirectory(Assembly.GetExecutingAssembly()全名)。);' 'evidence.AddHostEvidence(新區(SecurityZone.MyComputer));' – Kosau

回答

1

我自己解決了這個問題,我忘了從MarshalByRefObject繼承我的類。它有點愚蠢,它允許你創建一個實例並調用它,除了它仍然在默認域中運行,你會認爲它會拋出一個異常或者其他東西,無論如何通過將該類標記爲[Serializable()]並從MarshalByRefObject派生修復它。

+1

標誌當考慮跨應用程序域調用時,具有'SerializableAttribute'並從'MarshalByRefObject'派生它的類有些相互排斥。 – hypersw