4

誰かがこの 2010 年のバグの解決策を持っているかどうか疑問に思っています。デザイナー ウィンドウが開いている場合にのみ、アプリケーションが実行された後に Visual Studio が dll を保持しているため、2010 年にはビルドされない Visual Studio 2008 で正常にビルドされたプロジェクトがあります。この問題を示す非常に軽量なプロジェクトを作成しました。アプリケーションを作成する場合は、lib dll を作成します。1 つのフォームを dll に入れ、そのフォームをデザイン ビューで開き、アプリケーションを実行します。正常に実行され、アプリを閉じ、デザイン ビューでフォームのコード ビューに移動し、コードを変更して (単一の変数の名前を変更しただけです)、再コンパイルを試みて次の結果を得ます。

エラー 1 ファイル "obj\Debug\customlib.dll" を "build\debug\customlib.dll" にコピーできません。別のプロセスで使用されているため、プロセスはファイル 'build\debug\Customlib.dll' にアクセスできません。

Process Explorer を実行して dll を検索すると、dll を保持しているプロセスは devenv.exe だけです!!!

この問題について大量の検索を行ったところ、ロックされた dll を別の名前 (.locked) に移動してビルドするための事前手順を追加するだけで、以前のバージョンの Dev Studio で同様の問題が見つかりました。最初はうまくいきますが、次に実行して編集すると、現在の dll と .locked に移動した dll の両方からロックアウトされます。ロックされた dll の名前をランダムに生成するコードを追加しない限り、これは私にとってはうまくいきません(ファイルが削除されずにデバッグディレクトリのサイズが大きくなるのは望ましくありません。)

私が見つけた回避策は 1 つだけです。あなたがこれと同じ船に乗っている場合、これを編集して実行する必要があります。デバッガーでプロジェクトを実行する前に、すべてのデザイン ビュー ウィンドウが閉じていることを確認します。開いているすべてのデザイン ビュー ウィンドウを閉じると、devenv.exe は dll を保持しません。

誰でもこの問題に対するより良い解決策を持っていますか?

4

2 に答える 2

3

これがうまくいくかどうかはわかりませんが、AssemblyInfo.cs に次の行がある場合、この同様の質問があります。

[assembly: AssemblyVersion("2.0.*")]

それを次のように変更します。

[assembly: AssemblyVersion("2.0.0.0")]

この問題を解決します。

Visual Studio アドオン「VSCommands」は、この問題を修正すると主張しています。まだテストしていませんが、IDE 内にスタックオーバーフローの評価トラッカーがあると主張していて、興味をそそられます :)

あなたの「デバッグの前にデザイナーを閉じる」回避策は、(これまでのところ)私にとってはうまくいっているようで、とても感謝しています。私の一日の大部分が次のワークフローに費やされる段階に達し始めていました...

  1. F5

  2. 大声で罵倒

  3. ALT F4

  4. WIN 3

  5. 待ち焦がれ…

  6. F5
于 2010-11-04T12:32:47.883 に答える
1

I have had the same problems for a long time and then suddenly they disappeared. I realized that the source of the problems was initializing code in the constructors of WCF services and WPF controls. After cleaning the constructors from any dependencies to other assemblies everything has been fine.

So my suggestion is: Clean your constructors.

In WPF it is possible that inserting:

if (DesignerProperties.GetIsInDesignMode(this)) return;

or similar will have the same effect.

于 2010-12-14T09:10:23.490 に答える