アセンブリ バージョンを適切に設定し、それをリフレクションで取得することに問題がありました。回避策を見つけましたが、なぜこのように動作するのかまだ興味があります...
私はクラス ライブラリ プロジェクトを持っています。それを読み込んで、次のコードでバージョンを読み込んでいます。
var assembly = Assembly.LoadFrom(assemblyName);
var version= assembly.GetName().Version;
そして、私は良い結果を得ます:
assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version "1.0.0.0"
しかし、クラス ライブラリ プロジェクトで、アセンブリ バージョン フィールドとファイル バージョン フィールドの値を 2.0.0.0 に変更しました。私はそれをコンパイルし、IL DASM を実行して両方のライブラリを比較しました。
IL DASM のどこでも、つまりメイン ウィンドウ、マニフェスト、Metainfo で、新しいライブラリのバージョンが 2.0.0.0 で、以前のライブラリのバージョンが 1.0.0.0 であることを確認できたので、すべてが正しいことに満足しました。
しかし、アプリケーションに戻り、アセンブリをバージョン 2.0.0.0 でロードしました。結果は次のとおりです。
assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version "1.0.0.0"
したがって、リフレクションは適切なバージョン値を返しません。回避策は、FileVersionInfo クラスを使用することです。
FileVersionInfo.GetVersionInfo(assemblyName).FileVersion;
これで適切な結果が得られました。
私の質問は次のとおりです。リフレクション メカニズムによって適切なバージョンを取得できるようにするには、クラス ライブラリ プロジェクトで他に何を変更する必要がありますか? IL DASM が適切なバージョンを表示し、リフレクションが表示されないのはなぜですか? ボンネットの下の IL DASM は反射を利用しているといつも思っていましたが、今では
すべての回答に感謝します。