- PR -

JITコンパイラの動作について

投稿者投稿内容
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-01-11 07:29
お世話になります

C#で作成した、アプリを配布していますが。
修正したアッセンブリで上書きしてもらっても、以前のままの動作となっています。
配布先は、.NET Frameworkのみです。
(当方の環境では(開発環境)問題なく更新されます、複数台有りますが、全て開発環境を入れている為、確認出来ません)

JITコンパイラの説明では、初回にネイティブコンパイルがされ、次回以降そのネイティブコードが使われるとなっています。
JITの動作を変更することも出来るとなっていますが、ご存知の方お教え願います。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-01-11 10:47
追記します。

アッセンブリバーションは(下記)のまま使っています。
[assembly: AssemblyVersion("1.0.*")]
よって、アツセンブリバージョンは変化していると思います。

又、System.Reflection.Emit.MethodRental.JitImmediate;を書いておけば
強制的にネイティブコンパイルされるのでしょうか。

よろしくお願いします。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2003-01-11 13:39
> C#で作成した、アプリを配布していますが。
> 修正したアッセンブリで上書きしてもらっても、以前のままの動作となっています。
> 配布先は、.NET Frameworkのみです。
> (当方の環境では(開発環境)問題なく更新されます、複数台有りますが、全て開
> 発環境を入れている為、確認出来ません)

JITコンパイラについては詳しくありませんが、同じくC#で開発したアプリを配布し、何度かユーザー(.NET Frameworkだけの方ばかり)に上書きインストールをしてもらっていますが、上書き更新できないということは聞いていません。
# 突然、WinFormアプリが起動できなくなったという話は聞いたことがありますが、
# 違う問題と認識しています。

ちなみに、以下のような形で配布しています。
・AssemblyVersionは1.0.0固定
・厳密名ツール(sn)で作成したKeyを付けている
・インストーラーはなく、Zipファイルを解凍するだけ

アセンブリは基本的に、%windows%\assemblyディレクトリなどにキャッシュするもの以外はキャッシュはされないという認識でいます。詳細はヘルプの「assembly cache」を参照して下さい。

また、開発環境においても、アプリで使用しているFontが一時的に壊れたことがあり、何度ビルドしても直らなかったことがあります。その時は、Fontを使っているコードに少し手を加えてビルドしなおしたら直りました。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-01-11 17:58
二天さん情報有難う御座います。

私も、複数のPCで何度確認しても現象は出ませんでした。
(.NET Frameworkだけの物やSDK付きの物も確認しました。)

しかし、私自身が一度現地に行きインストールした時、一度その現象を
確認しています。

条件は、OSがWindowsXP Professionalで.NET Frameworkインストール
初回は、当方で作成したインストール用ソフトよりインスートし正常に動作。
その後、デバック用ノートPC(別途調達)のでアセッンブルを作成し、コピー
しかし、ファイルはコピーできましたが、動作は以前のままでした。
何度かやり直しましたが、同じでした。
その後PCを再起動すると其の時は、更新できました。

今回は、当方よりファイルのみメールで送付し、上書きして貰っていますが
更新できません。
PCも再起動したそうです。

・AssemblyVersionは1.0.*で
・厳密名はつけていません

私自身が最終ユーザーと直接コンタクト出来ないのと、設置場所が遠隔地なので
状況はこの程度しか分かりません。

キャシュフアイルを削除すれば更新できるのでは?と思っていますが。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2003-01-11 18:57
> キャシュフアイルを削除すれば更新できるのでは?と思っていますが。

キャッシュについては、グローバルキャッシュとダウンロードキャッシュの2種類ありますが、グローバルキャッシュはGacutilツールで明示的に%windows%\assemblyディレクトリに入れないと入らないはずです。ダウンロードキャッシュは、ネットからダウンロードしてきた場合のキャッシュみたいです。それなので、通常使用するアプリはどちらのキャッシュには入らないと見ています。

キャッシュを疑うという意味では、Gacutilツールにはグローバル アセンブリ キャッシュとダウンロードされたファイルのキャッシュの内容一覧を表示するオプションがありますので、実行して調べてみると良いかも知れません。
Gacutilツールは、「%WINDOWS%\Microsoft.NET\Framework\v1.0.3705」ディレクトリに入っているので、Frameworkだけのユーザーでも入っているはずです。
なお、Gacutilツールはキャッシュの削除オプションがありますので、注意して使って下さい。

キャッシュ以外には、おそらくexeファイルを上書きしていると思いますが、exeファイルのプロパティを見てもらい、バージョン情報を確認してもらっては如何でしょうか?
アセンブリのバージョンを振り直しているのであればその確認が一番確実だと思います。

ちなみに、私のアプリも各ユーザーにメールで送付して上書きインストールしてもらっています。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-01-12 05:29
ニ天さんどうも有難う御座いました

私の環境では、gacutilを試しましたが、グローバルもダウンにも
当然該当キャシャは存在しませんでした。

最終ユーザーさんにも試してもらう為BATファイルを作成し送付予定です。
又、結果が出ればご報告します。

rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-01-12 06:53
済みません、関連で教えて下さい。

下記プロパティの説明で、マニュフエストが格納されているファイルがシャドウコピー
されていない時、・・・
System.Reflection.Assembly.GetExecutingAssembly().Location
となっていますが、シャドウコピーとは?。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2003-01-12 13:07
> シャドウコピーとは?

シャドウコピーの詳しい意味はヘルプには記載されていないみたいですね。
私が見た限りでは、「WebサーバのIISが、複数アクセス時のロックを避けるためにアセンブリをコピーして使用する」時に使われるということと認識したのですが、他にも意味があるかも知れません。

スキルアップ/キャリアアップ(JOB@IT)