一見すると、私の問題は一般的な問題のようでした。自分のプロジェクトの中にカスタムMSビルドタスクがあります。プロジェクトをコンパイルすると、ビルドタスクをもうコンパイルできなくなります。ビルドタスクアセンブリはVisual Studioによってロックされます。カスタムMSBuildタスクロックアセンブリ
ここには、「AppDomainIsolatedTaskから継承しました」という記事がたくさんあります。
私のタスクは既に行います。アセンブリには、この作業以外は何も含まれていません。 AppDomainがアンロードされているようですが、少なくともDomainUnloadイベントが発生します。そして、依存するアセンブリは正しくアンロードされます。
しかし、ビルドタスク自体を含むアセンブリはdevenv.exeによってロックされています(これはProcessExplorerによって二重チェックされます)。
「GenerateResourceNeverLockTypeAssembliesプロパティをtrueに設定してください」という別の投稿がありましたが、これは有望でしたがどちらでも役に立ちませんでした。
他に何が間違っているのだろうか。 VS2008または2010を使用しても、動作は同じです。
http://stackoverflow.com/questions/3371545/visual-studio-2008-locks-custom-msbuild-task-assemblies – alexandrul
これは同じ質問ではありません。私は同じ問題を抱えていますが、問題はタスクアセンブリがロックされていることではありません(これは理解できます)。問題は、あなたのタスク(例えばAssembly.LoadFrom()など)内でロードするdllファイルは、たとえタスクのAppDomainが破棄された後でも決して解放されず、あなた自身で別のAppDomainを作成してそこからDLLをロードしても、 DLLは、AppDomainを終了した後でもロックされています。同じコードは、コンソールアプリケーションでは正常に動作します(プログラムはまだ動作していますが、uがappdomainをシャットダウンするとDLLが解放されます)。しかしVSタスクでは動作が異なります – Sheepy
これはあなたの質問に対する回答ではありません。 VS IDE内からのコードジェンのいくつかの種類、IDEが実行されている間、あなたはおそらくT4テンプレートまたはVSカスタムツールを活用する方が良いでしょう。これは、特にT4テンプレートを使用している場合、問題をきちんと立てておく必要があります。 –