2013-08-06 85 views
4

我得到了奇怪的錯誤,不知道爲什麼。C#反射GetType()異常

​​

奇怪的是我自己並沒有使用方法GetType()。它是由以下行引起的:

var domainCommunicator = (DomainCommunicator)dmn.CreateInstanceAndUnwrap(typeof(DomainCommunicator).FullName, "DomainCommunicator"); 

domainCommunicator繼承自MarshalByRefObject。它是公開的,但是當我將它改爲私有的時候,我得到了程序集無法加載的異常。當我在解決方案中創建額外的項目並完全使用外部.dll時,沒有任何更改。可能是因爲我必須參考我的新AppDomain中的主項目。

對我來說最好的事情就是跳過DomainCommunicator類的反射。它應該是私密的,就是這樣。究竟是什麼導致了異常?

+0

是'dmn'對象一個AppDomain? – SWeko

回答

5

AppDomain.CreateAndUnwrap期望Assembly.FullNameType.FullName

public Object CreateInstanceAndUnwrap(
    string assemblyName, 
    string typeName 
) 

正確用法是:

var type = typeof(DomainCommunicator); 
var domainCommunicator = (DomainCommunicator)dmn.CreateAndUnwrap(type.Assembly.FullName, 
                   type.FullName); 

示例值:

Assembly.FullName

  • AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Type.FullName

  • Namespace+ClassName
+0

如此明顯。當然,在管理序列化異常之後它就起作用了。 AppDomains是如此邪惡:)非常感謝你 –

+0

我很高興它爲你工作! – Romoku