私はアセンブリを持っています。そのアセンブリのビルドに使用された .NET のバージョンを検出する方法はありますか?
5 に答える
おそらくAssembly.ImageRuntimeVersionを使用できます。MSDN docsによると、既定では、これはアセンブリのビルドに使用される CLR のバージョンに設定されています。どうやらそれは変更することができますが。
これは文字列プロパティなので、文字列比較を行う必要があります。
私はそうは思いません。.NET 2.0 で .NET 1.1 アプリをビルドするのは比較的難しいですが、不可能ではありません。そのため、アプリが参照している mscorlib のバージョンを確認すると、それが 1.1 でビルドされたのか 2.0 でビルドされたのかについて「おそらく正確な」図を取得できます。 +。
また、VS2008 を使用しているが、.NET 2.0 のターゲットに対してビルドする場合に、どのような答えが必要かを自問する必要があります。実際に使用されたコンパイラのバージョンに興味がありますか? 異なるバージョンのコンパイラの出力には、いくつかの特徴的な違いがある場合があります。追加の機能によっても問題が発生する可能性があります。アプリが .NET 2.0 を対象とする C# で記述されている場合、ソース コード内の匿名型から生成されたように見える型を見つけることができます。もちろん、それはそもそも使用されている言語機能に依存しています...
興味があるからといって、なぜこれを知る必要があるのですか?
System.Reflection を使用して、システム参照アセンブリのバージョン番号を確認できます。
using System;
using System.Reflection;
class Module1
{
public static void CheckReferencedAssemblies(string assemblyPath)
{
Assembly a = Assembly.Load(assemblyPath);
foreach (AssemblyName an in a.GetReferencedAssemblies() )
{
// Check an.Version for System assemblies
}
}
}
編集:あなたが何を望んでいるのか理解できたかどうかわかりません。
あなたの質問の問題の一部は、.NET がバージョンが増加してもコードを変更しないというかなり良い仕事をしたことです。つまり、mscorlib は .NET 1.1 と同じように .NET 4.0 でも同じになるということです。
しかし、Jon Skeet の暗黙の質問にはある程度同意します。「なぜ知る必要があるのですか?」それは純粋に興味があるからですか。あなたには関係ないと思うからです。