ロックを取得する原因となりますこれは、私のアプリケーションがソリューションパッケージフォルダからメモリにDLLをロードしたためです。はnugetパッケージDLLは、私は、次のコードを実行しています
具体的 Microsoft.Bcl.Build.Tasks.dll
この1つのファイルは私のアプリケーションで「使用中」になってしまいますので、アプリケーションが終了するまで、私のアプリケーションは、一時ディレクトリを削除することはできません。
チキンとエッグ - フォルダがなくなるまでアプリケーションを閉じたくないので、アプリケーションが終了するまでフォルダを削除できません。
誰もが知っている解決策はありますか?
例:
DLLがアプリケーションにロードされると、それは永続的で、伝統的にリリースすることはできません。
しかし、私は過去に、アプリケーション内で追加のAppDomainsを作成し、メインアプリケーションの代わりにアセンブリをAppDomainsに読み込んでAppDomainと関連する参照/アセンブリを処分できると聞いています。ハンドル?
注 - 私は上記のNugetパッケージの復元を呼び出していることを知っていますが、コードをステップ実行すると、確実にロックがビルドステップで発生し、ナゲットの復元では発生しません。
残念ながら。この問題は、BuildManagerクラスではそれほど重要ではありません.Dllがホストアプリケーションに読み込まれていて、アンロードされていないということのほうが関係しています。 C#dllのアンロードを邪魔します。これにより、このMicrosoft BCL dllがロックされることに対応することが不可能に近づきます。 – Baaleos
ちょうどアイデアだが、別のAppDomainがそのトリックを行うべきである。基本的にそこにすべてのものをロードして、完了したら破壊することができるからだ! –
あまりにもうまくいきませんでした。 私はビルド全体を実行して、プロキシドメイン内でプロセスを実行しようとしました。 実際の参照/ assembly.load()ではなくdspがプロジェクト/ターゲットインポートとしてcsprojによってロードされていたためだと思います。 – Baaleos