2013-03-28 48 views
4

我收到的時候我把這個堆棧跟蹤:序列化異常4.5

XslCompiledTransform.Transform(XmlDocument.DocumentElement.CreateNavigator(), null, StringWriter) 


System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.Runtime.Serialization.SerializationException: Type is not resolved for member --MyProject stuff 
    at System.AppDomain.GetHostEvidence(Type type) 
    at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate) 
    at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) 
    at System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext() 
    at System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext() 
    at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName) 
    at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath) 
    at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig) 
    at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig) 
    at System.Configuration.ClientConfigurationHost.get_HasRoamingConfig() 
    at System.Configuration.ClientConfigurationHost.IsConfigRecordRequired(String configPath) 
    at System.Configuration.BaseConfigurationRecord.hlNeedsChildFor(String configName) 
    at System.Configuration.Internal.InternalConfigRoot.GetConfigRecord(String configPath) 
    at System.Configuration.ClientConfigurationSystem.OnConfigRemoved(Object sender, InternalConfigEventArgs e) 
    --- End of inner exception stack trace --- 
    at System.Configuration.ConfigurationManager.PrepareConfigSystem() 
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) 
    at System.Xml.XmlConfiguration.XmlReaderSection.get_ProhibitDefaultUrlResolver() 
    at System.Xml.XmlTextReaderImpl.get_IsResolverNull() 
    at System.Xml.Xsl.QueryReaderSettings..ctor(XmlReader reader) 
    at System.Xml.Xsl.Xslt.XsltLoader.Load(Compiler compiler, Object stylesheet, XmlResolver xmlResolver) 
    at System.Xml.Xsl.Xslt.Compiler.Compile(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil) 
    at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver) 
    at System.Xml.Xsl.XslCompiledTransform.Load(XmlReader stylesheet, XsltSettings settings, XmlResolver stylesheetResolver) 
    at MyProject 

的XslCompiledTransform對象加載使用GetManifestResourceStream到嵌入式.xslt文件一個XmlReader,但我已經證實,它是正確獲取該信息。

我已經看了很多,並縮小到這個電話,但我不知道該從哪裏去。有沒有其他人經歷過這個?

這是一個Windows 8機器上,但我經歷過上server2008r2 OS

+0

您是否有機會在自定義AppDomain中運行您的代碼並使用自定義Principal? –

回答

14

我與.NET 4.5遇到了同樣的錯誤。我只在使用nunit 2.6+時看到錯誤。當你在一個子AppDomain中初始化一個XmlSerializer時,似乎會發生這種情況,對象存儲在CallContext中。如果ApplicationBase(bin路徑)在子AppDomain中設置爲不同的內容,CallContext中對象的類型無法解析。您可以在Fusion Log Viewer中看到程序集綁定錯誤:在我的情況下,如果我將其中的類型複製到nunits bin-path中,錯誤消失。這當然不是一個可行的解決方案。

您是否發現錯誤的根本原因?

編輯:我通過讓類型繼承MarshalByRefObject的固定它:Type cant be resolve in UnitTest after migrating Project from vs2005 to vs2010 (MSTest)

編輯2:可替代的解決方法是調用System.Configuration.ConfigurationManager.GetSection(「虛擬」)之前失敗的代碼。

+0

就我個人而言,它是(根據@ MikeGoatly昨天的評論)與'CallContext'關聯的委託人。我的工作是將'Thread.CurrentPrincipal'安全到本地變量中,然後在編譯Xsl轉換的同時爲其分配一個'new ClaimsPrincipal()'。 (然後恢復它) –

+1

@Andreas Kromann,你能解釋爲什麼調用'ConfigurationManager.GetSection()'解決這個問題嗎?我已經嘗試過了,它可行,但我無法解釋它。 – RePierre

+2

神祕修復(2)爲我工作。我們不想知道爲什麼...... – fiat