3

アセンブリを通じて、他の .NET アプリケーションが使用しているフレームワークのバージョンを確認しようとしています。フレームワークのバージョンを取得する 2 つの方法を見つけました (最初は ImageRunetimeVersion を使用し、アセンブリの FullName を使用) が、そこから 2 つの異なる値を取得しており、どちらが正しいかわかりません。

        Assembly ass = Assembly.LoadFrom(autPath);            
        string imageRuntimeVersion = ass.ImageRuntimeVersion;
        Console.WriteLine("ImageRunetimeVersion: " + imageRuntimeVersion);
        Console.WriteLine("FullName: " + ass.FullName);

        Console.WriteLine("");            
        Console.WriteLine("----");
        Console.WriteLine("Referenced Assemblies: ");
        Console.WriteLine(""); 

        AssemblyName[] referencedAssemblies = ass.GetReferencedAssemblies();
        foreach (AssemblyName a in referencedAssemblies)
        {
            Console.WriteLine(a.FullName);
        }

これを自分のアプリケーションとたとえば paint.net でテストすると、結果は次のようになります。

ご覧のとおり、どの「バージョン」が正しいかはわかりません。最大の問題は、.net アプリケーションのプロジェクト プロパティを確認しようとすると、ターゲット プラットフォームが 2.0 または 1.0 ではなく 3.5 であることです。

4

3 に答える 3

5

私はあなたのためにいくつかのことを片付けることができると思います。まず、FullNameプロパティは、アプリケーションのバージョン番号を提供します。これは設定した数値であり、.NETFrameworkのバージョンとは関係ありません。つまり、FullNameプロパティのバージョン番号は無視できます。

imageRuntimeVersionはCLRバージョンです。残念ながら、2.0は.NET 2.0、3.0、および3.5をカバーしています。技術的には、アプリケーションは適切な情報を提供しますが、実際には必要な情報ではありません(私は思いません)。

詳細な説明が記載されたSOの記事は次のとおりです 。.Netアセンブリからターゲットフレームワークバージョンとターゲットフレームワークプロファイルを取得する

その記事からのいくつかの提案には、ターゲットとなるフレームワークを提供する構成ファイルを探すことや、使用されているライブラリのバージョンを調べることが含まれます。どちらも本当に絶対確実というわけではありませんが、私が知る限り、それがあなたにできる最善のことです。

于 2012-04-11T12:16:03.500 に答える