2009-03-17 15 views
1

現在約2週間、プロジェクトのUnitTests(VSユニットテストで構築されたもの)を実行できませんでした。以前はすべて正常に動作しました。エラーメッセージは次のとおりです。Strange dllエラーメッセージ

ファイルまたはアセンブリ「をロードできませんでしたC:\ Program Files \ MicrosoftビジュアルStudio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ MyProjectName.XmlSerializers.dll」またはその依存関係の1つ

プロジェクトはSystem.Xml.Serializationを参照していますが、私が書いた他の多くのクラス/プロジェクトと同様に、XmlSerializerクラスも使用されています。

私はそのディレクトリをチェックしました。そのディレクトリ内のすべてのdllはMicrosoft dllです。明らかに探しているDLLはMicrosoft dll。

誰もが考えている?

編集: 明らかに、XmlSerializerを使用して、それがsgen.exeを使用する代わりに自動的にそのファイルを生成することと関係があります。ここにMSDN articleへのリンクがあります。私が見つけたことから、シリアライザをジェネリックで使うことと関係があります。私が見つけた情報源のどれも、それが実際に働くような方法を提供していないようです。

答えて

0

ソリューション

結局のところ、問題は、VMwareとありました。私は最新のバージョンのVMWareをインストールし、VMにデバッグするためのツールをインストールしました。インストールまたは変更されたものが原因です。私がVMWareをアンインストールしたとき、問題は消え去った。だから、私はそれをデバッグ機能をインストールせずにVMWareを再インストールし、問題は戻ってこなかった。

回避策

私はまだこの問題が突然発生し始めた理由はわかりませんが、私はそれを動作させるためのハックを発見しました。

私は性質が=>イベントを構築し、ビルド後に実行するコマンドラインに次の行を追加し投影する行かなければならなかった:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" "$(TargetPath)" /force

これは、ファイルを生成するためにVSを強制します。私はそれから、それを探していたディレクトリに手動でファイルをコピーしなければならなかった:

"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"

これで私のテストを実行し、それらを実行することができます。私が今問題としているのは、1)シリアル化しているクラスで何かを変更するたびにdllをそのディレクトリにコピーすることを覚えておく必要があります。2)テストの実行が終了するとThreadInterruptedExceptionが発生します。したがって、私は一度に1つのテストしか実行できません。

良い解決策ではありませんが、少なくとも私は挫折します。残念ながら、Nikita Borodulinが示唆したように、すべてをやり直すことは選択肢ではありません。

+0

私はNikitaが* .sln/csprojファイルを削除/削除し、新しいプロジェクト/ソリューション(同じディレクトリ)を作成し、ファイルを再追加することを提案していると思います。途中で何かが起きたかもしれない。 – KevinRF

0

すべてのソースファイルをどこかにコピーしてから、プロジェクトを削除してゼロから作成しようとします。

3

まず、見つからないものを確認するためにローダーロギングを有効にします(FUSLOGVW.exeをSDKから使用)。

次に、存在しないアセンブリをロードしようとしているアセンブリを見つけるために、すべてのアセンブリでReflectorを使用します。そのようなアセンブリが見つからない場合は、動的にロードする必要があります。その場合、AppDomain.AssemblyResolveにアタッチすると、どこに識別することができます。

0

コンピュータは64ビットですか? NUnitでx86アセンブリ(corflagsを使用)として動作するように設定された64ビットdllを実行しようとしたときに同じエラーが発生しました。

おそらく、エラーメッセージ(FUSLOGVW.exeリチャードリチャードが示唆している)を使用して見つけることができます。

この場合、corflagsを使用してdllまたはNUnitを正しいアセンブリとして実行することができます。