0

少し前に、Silverlightアプリの現在のバージョンを表示する必要がありました。いくつかグーグルした後、次のコードは私に望ましい結果を与えました:

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

これは、.NET 3.5Silverlight3環境でうまく機能しました。ただし、最近.NET4とSilverlight4にアップグレードしました。ビルドマシンの動作を終了したばかりで、このコードの単体テストで次の例外がスローされていることがわかりました。

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()

私はこれまでこの例外を見たことがなく、その中のリンクはどこにも指していません。ビルドマシンにのみスローされ、開発ボックスにはスローされないため、試行錯誤を繰り返して、2つの違いを確認します。

なぜこれが起こっているのか考えてみませんか?

乾杯、アンドレイ。

4

1 に答える 1

0

通常TypeLoadException、Silverlight アセンブリがデスクトップ ライブラリにリンクされていて、そのタイプが Silverlight でサポートされていないシステム タイプにアクセスしている場合に表示されます。

Silverlight 4 で壊れた理由を説明することはできませんが、Silverlight ライブラリ内の何かだと思います。システム タイプの 1 つで同じコードを実行し、クラッシュするかどうかを確認できますか?

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

上記がクラッシュしない場合は、 のビットをコメントアウトして、MyClass原因となっている部分を確認してくださいTypeLoadException

于 2010-05-11T02:56:57.847 に答える