2010-08-27 20 views
0

在下面的代碼片段中CodeBase屬性在程序集System.Xml.Xsl.CompiledQuery上失敗,沒有其他地方。該消息表示「被調用的成員在動態程序集中不受支持」。爲什麼我在使用System.Reflection.Assembly.CodeBase屬性時突然發生異常?

我得到CodeBase屬性沒有實現,我不明白爲什麼突然間這是一個問題。此代碼已服役數月沒有問題,突然...


if(CompareCaseInsensitive(Path.GetFileNameWithoutExtension(assembly.CodeBase), namespaceURI)) 
    return assembly; 

我有可供解決此代碼的幾個選項,但我希望有人能解釋的方式,可能會導致發生了什麼到更強大的解決方案。

編輯與問題後續。

是否有某種方法可以告訴哪些程序集實現了此屬性,哪些程序不會訴諸例外?

+0

您是否一直在使用System.XML.Xsl.CompiledQuery?或者是新的? – 2010-08-27 14:51:38

+0

是的,我做了一個搜索組件,我們正在做一個新的XSLT轉換。更好的測試代碼覆蓋率會抓住這一點。 – 2010-08-27 18:00:31

回答

4

使用System.Reflection.Emit命名空間類生成的任何代碼都不會有代碼庫。由於代碼並未從程序集加載,因此它是在運行時生成的。當然包括System.Xml.Xsl類,它們確實使用嚴格依賴於System.Xml.Xsl.IlGen的內部System.Xml.Xsl.XmlILGenerator類。很多Reflection.Emit代碼在那裏。

我猜不出爲什麼這個工作之前。也許.NET 4.0,不確定。

+0

感謝漢斯。你有沒有機會知道我關注的問題的答案? – 2010-08-27 18:05:32

+0

檢查asm.GetType()。如果它是System.Reflection.Emit.AssemblyBuilder,請遠離它。 – 2010-08-27 18:11:11

相關問題