2010-08-27 2 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 все время? или это новое? –

+0

Да, Тони, я сделал поиск в сборке, и мы делаем новое преобразование XSLT. Лучшее покрытие тестового кода поймало бы это. –

ответ

4

Любой код, сгенерированный с помощью классов пространства System.Reflection.Emit, не будет иметь CodeBase. Поскольку код не был загружен из сборки, он был сгенерирован во время выполнения. Это, безусловно, включает классы System.Xml.Xsl, они используют внутренний класс System.Xml.Xsl.XmlILGenerator, который сильно опирается на System.Xml.Xsl.IlGen. Много Reflection.Emit код там.

Я не могу догадаться, почему это сработало раньше. Возможно, .NET 4.0, не уверен.

+0

Спасибо, Ханс. Вы случайно знаете ответ на мой вопрос? –

+0

Проверьте asm.GetType(). Держитесь подальше от него, если это System.Reflection.Emit.AssemblyBuilder. –

Смежные вопросы