[seasar-dotnet:1496] Re: PartCover Nunit S2Container.netでカバレッジが取得できない(例外が発生する)

早川貴彦 [E-MAIL ADDRESS DELETED]
2009年 9月 29日 (火) 01:29:11 JST


菊池さん

確認すべき箇所を指摘いただきありがとうございます。早川です。


[中間進捗]
1.assemblyコンパイルのタイミングで'System.AccessViolationException' が発生している
  (保護されたメモリに対して読み取りまたは書き込みを行おうとするとスローされる例外)
 発生位置:             CompilerResults results =
_provider.CompileAssemblyFromSource(parameters, EVAL_SOURCE);
  の行を実行時。
   (JScriptUtilのstaticイニシャライザにて)


2.アセンブリバインディングログビューアには 動的に生成されるJScript関連のDLLは
   一切表示されない(1が先に発生しているためにその所までたどり着いていない)

3.Seasar.XmlSerializers というアセンブリだけが
  ログビューアにおいて
  *** アセンブリ バインド ログ エントリ  (2009/09/29 @ 0:47:39) ***

操作に失敗しました。
バインド結果: hr = 0x80070002. 指定されたファイルが見つかりません
  中略
ログ: DisplayName = Seasar.XmlSerializers, Version=1.3.9.0,
Culture=neutral, PublicKeyToken=1d0d0c484d50ca62,
processorArchitecture=MSIL
 (Fully-specified)

呼び出しているアセンブリ: System.Xml, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
===
  後略

  と表示されている。 (この名前のdllってありましたっけ?)

〜詳細〜

1.のSystem.AccessViolationException の発見方法について
 先日のメール記載では
  PartCover→Nunitの、Nunitのコンソールログをコピペしました
  もう少し深く潜って調べることが出来るのでは?と
  PartCover→Nunitを起動後、Visual Studio側にて
  [メニューバー] [デバッグ][プロセスにアタッチ]にて
  プロセスとしてNunit.exeを選択して実行したところ
  Visual Studioの出力ウィンドウに下記のログが表示されました

 前略
'nunit.exe' (マネージ型):
'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.JScript\8.0.0.0__b03f5f7f11d50a3a\Microsoft.JScript.dll'
が読み込まれました
'nunit.exe' (マネージ型):
'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll'
が読み込まれました
'nunit.exe' (マネージ型):
'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Vsa\8.0.0.0__b03f5f7f11d50a3a\Microsoft.Vsa.dll'
が読み込まれました
'System.AccessViolationException' の初回例外が Microsoft.JScript.dll で発生しました。
'System.TypeInitializationException' の初回例外が Microsoft.JScript.dll で発生しました。
'System.TypeInitializationException' の初回例外が Microsoft.JScript.dll で発生しました。
'Microsoft.Vsa.VsaException' の初回例外が Microsoft.JScript.dll で発生しました。
'nunit.exe' (マネージ型):
'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.JScript.resources\8.0.0.0_ja_b03f5f7f11d50a3a\Microsoft.JScript.resources.dll'
が読み込まれました
'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。
'System.TypeInitializationException' の初回例外が Seasar.dll で発生しました。
'System.Reflection.TargetInvocationException' の初回例外が mscorlib.dll で発生しました。
'NUnit.Core.NUnitException' の初回例外が nunit.core.dll で発生しました。
スレッド 0xd00 はコード 0 (0x0) で終了しました。
スレッド 0x9fc はコード 0 (0x0) で終了しました。



[アセンブリバインディングログの取得]メモ書き

1)[スタート][すべてのプログラム][Microsoft Windows SDK v6.0A][Fusion ログ ビューア]の実行
2)[設定] すべてのバインドをディスクに記録する チェック
      カスタムログを有効にする    チェック
      パス: テストdllが存在するbin\debug フォルダ
 に設定
3)PartCoverからNunitを起動し、ログビューアにて
  [最新の情報に更新]でログが表示され始める
  (このときのは起動に関連するdll系のみ?)
4)Nunitからテストを実行しログの最新を更新。

[アセンブリバインディングログの抜粋(ごく一部]

最後のlog単位は log4net その直前はMicrosoft JScript
(log4netが最後にでるのも何か気にはなるのですが、
JScriptもlog4netも 「操作に成功」という文字と

*** アセンブリ バインド ログ エントリ  (2009/09/29 @ 0:33:37) ***

操作に成功しました。
バインド結果: hr = 0x0. この操作を正しく終了しました。

アセンブリ マネージャの読み込み元:  c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
実行可能ファイル下で実行しています。  C:\Program Files\NUnit 2.5.1\bin\net-2.0\nunit.exe
--- 詳細エラー ログは以下のとおりです。

中略

===
ログ: このバインドは default の読み込みコンテキストで開始します。
ログ: アプリケーション構成ファイル C:\Documents and Settings\ユーザ名\My Documents\Visual
Studio 2008\Projects\sample\S2WindowsExample.Tests\bin\Debug\S2WindowsExample.Tests.dll.config
を使用します。
ログ: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config
からのコンピュータ構成ファイルを使用します。
ログ: バインドに成功しました。C:\Documents and Settings\ユーザ名\My Documents\Visual
Studio 2008\Projects\sample\S2WindowsExample.Tests\bin\Debug\log4net.dll
からアセンブリを返します。
エラー: アセンブリは default 読み込みコンテキストで読み込まれています
 ↑
この表現は気にはなりましたが、他のログとあわせてみる限り
正常を意味している (?)


・・・という状態です。

[残課題]
>参照解決に失敗したアセンブリ
> 関連チェックポイント
> ・GAC前提となっているアセンブリが正しくGAC登録されているか
> ・コンパイル時と実行時でバージョンの異なるアセンブリを利用していないか

上記の内、参照解決に失敗したアセンブリとしては
Seasar.XmlSerializersですが、どうも真因では無い気がしますし、バージョン違いやGACの件はまだ調べ切れてはおりません。

 (テストDLLをexeにして、そこからnunitを呼んでしまう
  PartCover → テストExe(内部でnunit)→アプリ
  なんてことを考えていたのですがちょっと時間が無いので
  そういったテストを後回しにしています。)

仕事の都合上、しばらくはこの件については後回しに
なってしまうのですが、
もし何か気がついた点がございましたら引き続き教えていただけると助かります。
どうぞよろしくお願い致します



2009年9月28日14:46  <[E-MAIL ADDRESS DELETED]>:
> 菊池です
>
>  アセンブリの参照解決で問題が発生しているように見えますね。
>
> http://msdn.microsoft.com/ja-jp/library/e74a18c4(VS.80).aspx
> fuslogvw.exe
>
> でのアセンブリバインディングで実際の参照関係とエラーの詳細の確認と
>
> http://msdn.microsoft.com/ja-jp/library/yx7xezcf(VS.80).aspx
> ランタイムがアセンブリを検索する方法
>
>>
> http://msdn.microsoft.com/ja-jp/library/efs781xb(VS.80).aspx
> <codeBase> 要素
>
>  を参照して参照解決に失敗したアセンブリを app.config で明示的にcodeBase指定してみてください。
> (またはアセンブリのある場所を pobing対象にしてください)
>
> 関連チェックポイント
> ・GAC前提となっているアセンブリが正しくGAC登録されているか
> ・コンパイル時と実行時でバージョンの異なるアセンブリを利用していないか
>
>  この辺も確認してみてください。
>
--


seasar-dotnet メーリングリストの案内