2017-04-15 12 views
0

異なるFrameworks(4.0と4.5)を対象に、同じアセンブリをコンパイルしました。Referenced Assemblyのバージョンの意味は?なぜ4.0.0.0ですか?

あなたは、私は、彼らが異なるフレームワークライブラリ(mscorlib、System.Coreなど)を参照する必要があることを期待しているdotPeek and two assemblies

dotPeek

でそれらを見ることができますが、私は間違っていました。どちらも同じ「バージョン= 4.0.0.0」を参照しています。

メモリ内の.NET CLRアプリケーションをロードすると、それらのバージョン番号(4.0.0.0)は無視されますが、「最新の使用可能なバージョンをプッシュする」ことを意味しますか? D

また、CLR(ローダーがその一部であると仮定します)は、ターゲットフレームワーク情報を無視しますか?つまり、ターゲット情報を使用する必要がないCLRローダーのバージョンを解釈すると...

または、私のコンパイルプロセスに問題があり、msbuildが構成していますか?

答えて

1

アセンブリバージョン番号(ファイルバージョン番号ではありません)をCLRバージョン(.NET Framework 1.x/2.0/4.0)に貼り付けることがありますが、Frameworkバージョン(3.5)もあります。 1つの利点は、そのバージョン番号を読むことによって、正しい参照を追加したかどうかを即座に知ることができることです。

あなたの期待は変わっていませんが、これはファイルバージョン番号にのみ関連しています。これは大幅に異なります(ホットフィックスでも変更できます)。 Windowsはパッチレベルを追跡するためにこのようなものを使用します。

マイクロソフトでは、アセンブリバージョン番号を変更しないで(インプレースアップグレードとして)保持することに決めました。 CLRはアセンブリのバージョン番号に焦点を当て、多くの場合、ファイルのバージョン番号を無視します。

更新済み:このコンベンションは、.NETコアの導入以来少し変更があります。アセンブリバージョン番号は、APIサーフェスを明示的に示すために使用され、迅速に変更できます。

+0

ありがとうございます。つまり、NET40とNET45でコンパイルされたアセンブリを同じNUGETパッケージに追加することは意味がありませんか?たとえば、NLog 4には40と45の両方が含まれています(35、mono10、sl4、sl5、wp8、xamarin.iOS10も含まれていますが、その意味があります)。 –

+1

多くのライブラリ(私が維持しているもののようなもの)では、net40とnet45の両方のバイナリを出荷する必要はありません。しかし、.NET Framework 4.5には、ライブラリに影響する特別な機能があります。https://github.com/NLog/NLog/search?utf8=%E2%9C%93&q=%22NET4_5%22&type=だから私は驚いていません。 –

関連する問題