Почему Assembly.GetCustomAttributes внезапно вызывает исключение TypeLoadException на компьютере сборки с Silverlight 4? - PullRequest
0 голосов
/ 11 мая 2010

Некоторое время назад мне пришлось отображать текущую версию нашего приложения Silverlight.После некоторого поиска в Google следующий код дал мне желаемый результат:

var fileVersionAttributes = typeof(MyClass).Assembly.
    GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false) as AssemblyFileVersionAttribute[];
var version = fileVersionAttributes[0].Version;

Это сработало в нашей среде .NET 3.5 Silverlight 3.Однако недавно мы обновились до .NET 4 и Silverlight 4. Мы только что закончили работу нашего сборочного компьютера и обнаружили, что модульный тест для этого кода вызывает следующее исключение:

Exception Message: 

System.TypeLoadException: Error 0x80131522.  Debugging resource strings are unavailable. See http://go.microsoft.com/fwlink/?linkid=106663&Version=3.0.50106.0&File=mscorrc.dll&Key=0x80131522 
   at System.ModuleHandle.ResolveType(ModuleHandle module, Int32 typeToken, RuntimeTypeHandle* typeInstArgs, Int32 typeInstCount, RuntimeTypeHandle* methodInstArgs, Int32 methodInstCount)
   at System.ModuleHandle.ResolveTypeHandle(Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.Module.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, Module decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, RuntimeMethodHandle& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
   at System.Reflection.CustomAttribute.GetCustomAttributes(Module decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)
   at System.Reflection.CustomAttribute.GetCustomAttributes(Module decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean isDecoratedTargetSecurityTransparent)
   at System.Reflection.CustomAttribute.GetCustomAttributes(Assembly assembly, Type caType)
   at System.Reflection.Assembly.GetCustomAttributes(Type attributeType, Boolean inherit)
   at MyCode.VersionTest()

Я никогда не видел этогоисключение до и ссылка в нем нигде не указывает.Он работает только на сборочной машине, а не на моей машине для разработки, поэтому я прохожу процесс проб и ошибок, чтобы увидеть любые различия между ними.

Есть идеи, почему это может происходить ??

Ура, Андрей.

1 Ответ

0 голосов
/ 11 мая 2010

Обычно вы видите TypeLoadException, когда сборка Silverlight связана с библиотеками рабочего стола и один из ее типов обращается к типу системы, который не поддерживается в Silverlight.

Я не могу объяснить, почему он сломался под Silverlight 4, но я думаю, это что-то внутри вашей библиотеки Silverlight. Можете ли вы выполнить один и тот же код на одном из типов системы и посмотреть, не сработает ли он?

typeof(string).Assembly.
    GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false) as AssemblyFileVersionAttribute[];

Если приведенное выше не дает сбоя, начните комментировать биты MyClass, чтобы увидеть, какая его часть вызывает TypeLoadException.

...