2010-12-16 10 views
12

一見すると、私の問題は一般的な問題のようでした。自分のプロジェクトの中にカスタムMSビルドタスクがあります。プロジェクトをコンパイルすると、ビルドタスクをもうコンパイルできなくなります。ビルドタスクアセンブリはVisual Studioによってロックされます。カスタムMSBuildタスクロックアセンブリ

ここには、「AppDomainIsolatedTaskから継承しました」という記事がたくさんあります。

私のタスクは既に行います。アセンブリには、この作業以外は何も含まれていません。 AppDomainがアンロードされているようですが、少なくともDomainUnloadイベントが発生します。そして、依存するアセンブリは正しくアンロードされます。

しかし、ビルドタスク自体を含むアセンブリはdevenv.exeによってロックされています(これはProcessExplorerによって二重チェックされます)。

「GenerateResourceNeverLockTypeAssembliesプロパティをtrueに設定してください」という別の投稿がありましたが、これは有望でしたがどちらでも役に立ちませんでした。

他に何が間違っているのだろうか。 VS2008または2010を使用しても、動作は同じです。

+0

http://stackoverflow.com/questions/3371545/visual-studio-2008-locks-custom-msbuild-task-assemblies – alexandrul

+1

これは同じ質問ではありません。私は同じ問題を抱えていますが、問題はタスクアセンブリがロックされていることではありません(これは理解できます)。問題は、あなたのタスク(例えばAssembly.LoadFrom()など)内でロードするdllファイルは、たとえタスクのAppDomainが破棄された後でも決して解放されず、あなた自身で別のAppDomainを作成してそこからDLLをロードしても、 DLLは、AppDomainを終了した後でもロックされています。同じコードは、コンソールアプリケーションでは正常に動作します(プログラムはまだ動作していますが、uがappdomainをシ​​ャットダウンするとDLLが解放されます)。しかしVSタスクでは動作が異なります – Sheepy

+0

これはあなたの質問に対する回答ではありません。 VS IDE内からのコードジェンのいくつかの種類、IDEが実行されている間、あなたはおそらくT4テンプレートまたはVSカスタムツールを活用する方が良いでしょう。これは、特にT4テンプレートを使用している場合、問題をきちんと立てておく必要があります。 –

答えて

-3

ファイルシステムのアクセス許可のセキュリティを変更することで解決できます。現在のユーザーをロックされたファイルの共同所有者のように配置します。