[BUG] 複数のプロジェクトが含まれるソリューションをビルドするとエラー メッセージ "一時ファイルを出力ディレクトリにコピーできませんでした" が表示される

文書翻訳 文書翻訳
文書番号: 313512 - 対象製品
この記事は、以前は次の ID で公開されていました: JP313512
すべて展開する | すべて折りたたむ

目次

現象

Visual Studio .NET で、複数のプロジェクトで構成されるソリューションをビルドすると、次のエラー メッセージのいずれかが表示されることがあります。
エラー メッセージ 1
一時ファイルを出力ディレクトリにコピーできませんでした。
ファイル 'assembly name' を実行ディレクトリにコピーできません。プロセスはファイルにアクセスできません。別のプロセスが使用中です。
エラー メッセージ 2
出力ファイル 'fully qualified path of an assembly' に書き込めませんでした -- 'プロセスはファイルにアクセスできません。別のプロセスが使用中です。'
エラー メッセージ 3
プロジェクトの出力を削除できません : ファイルが読み取り専用になっていませんか?A failure occurred while attempting to start the application.
エラー メッセージ 4
ファイル 'Managed C++ Output DLL' を削除できませんでした。このファイルがほかのプロセスによって使用されていないこと、また書込み禁止になっていないことを確認してください。


.exe プロジェクトが含まれるソリューションをビルドしようとしたときに、そのソリューションが第 2 のクラス ライブラリ プロジェクトか DLL アセンブリにも依存していると、次のようなビルド エラー メッセージが表示されることがあります。
型または名前空間名 'XXXXX' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。アセンブリ 'Tools' をファイル 'I:\samplesViews\Bin\Debug\XXXXX.dll' にコピーできません。ファイルが別のプロセスで使用されているため、プロセスはファイルにアクセスできません。
このエラー メッセージは、ソリューションをビルドするたびに発生します。

原因

この問題は、コンパイルするアセンブリのいずれかのサイズが 64 KB を超え、次のいずれか (または両方) の条件に該当する場合に発生することがあります。
  • ソリューションに含まれる複数のプロジェクトが同一の出力フォルダにコンパイルされます。
  • 参照されるアセンブリまたはプロジェクトのいずれかの "ローカル コピー" プロパティが False に設定されています。

解決方法

この問題を回避するには、プロジェクトに応じて次のいずれか (またはすべて) を実行します。
  • プロジェクトごとに別のフォルダに出力をコンパイルします。Visual Studio .NET 2002 および Visual Studio .NET 2003 では、出力フォルダの共有はサポートされていません。
  • 参照されるアセンブリまたはプロジェクトの "ローカル コピー" プロパティを True に設定します。
  • [オブジェクト ブラウザ] ウィンドウが開いていないことを確認します。
  • 同じプロジェクトを Visual Studio .NET の別のインスタンスで開いていないことを確認します。
: アセンブリ参照ではなく、プロジェクト参照を使用することを強くお勧めします。アセンブリ参照では、ファイル ロックの問題が発生しません。ただし、アセンブリ参照を使用する場合は、ビルド順序を手動で設定する必要があります。プロジェクト参照を使用すると、ビルド順序は自動的に確立されます。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

詳細

この問題は、参照されるアセンブリがプロジェクトの IntelliSense エンジンによってロックされるために発生します。参照されるアセンブリがロックされるのは、そのサイズが 64 KB を超える場合です。

このアセンブリ ロックの問題を解決するには、参照されるアセンブリのマスタ コピーがロックされないようにする必要があります。そのため、IntelliSense エンジンがロックできるように、参照されるアセンブリのコピーを用意します。アセンブリ参照の "ローカル コピー" プロパティが True に設定されていて、プロジェクトが専用の出力ディレクトリにビルドされる場合、ロック可能な参照アセンブリのコピーが既に存在します。

"ローカル コピー" プロパティにより、参照されるアセンブリのプライベート コピーがプロジェクトの出力パスにコピーされるかどうかが決定されます。参照を追加すると、プロジェクト システムによってこのプロパティのデフォルト値が計算されます。このデフォルト値を変更しないようにすることを強くお勧めします。参照されるアセンブリの "ローカル コピー" プロパティが True に設定されていると、IntelliSense エンジンによって、ローカルの Bin フォルダにあるアセンブリのプライベート コピーがロックされます。このアセンブリのプライベート コピーは、そのアセンブリのマスタ コピーが再ビルドされるたびに、自動的に更新されます。

現象の再現手順

この資料では、この問題が再現される、次の 2 つの状況について説明しています。
  • 出力フォルダを共有している場合
  • "ローカル コピー" プロパティを False に設定している場合
どちらの場合でも、64 KB を超えるサイズのアセンブリが必要です。この資料の例で使用するアセンブリを作成するには、次の手順を実行します。

: C# コードのエディタに行番号が表示されるように設定します。行番号が表示されていると、手順 8. が容易になります。
  1. C:\Test という名前の新規フォルダを作成します。
  2. Visual Studio .NET を起動します。
  3. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C# プロジェクト]、[クラス ライブラリ] を順にクリックします。
  4. [プロジェクト名] ボックスに MyLibrary と入力します。[場所] ボックスに C:\Test と入力します。
  5. [OK] をクリックします。
  6. [ソリューション エクスプローラ] で、MyLibrary をクリックします。[プロジェクト] メニューの [プロパティ] をクリックし、[構成プロパティ] を展開し、[ビルド] をクリックします。[出力パス] ボックスの設定を C:\Test に変更します。[OK] をクリックして [MyLibrary プロパティ ページ] ダイアログ ボックスを閉じます。
  7. [ソリューション エクスプローラ] で [Class1.cs] をダブルクリックして、デフォルト クラスのコード ウィンドウを開きます。
  8. Class1 に次の関数を貼り付けます。
            public void MyMethod()
                    {
                    Console.Write(".");
                    Console.Write(".");
                    Console.Write(".");
                    Console.Write(".");
                    // Repeat 
                    // Console.Write(".");
                    // about 5,500 times.
    }
  9. [ビルド] メニューの [MyLibrary のビルド] をクリックしてコンパイルを実行し、MyLibrary.dll ファイルを作成します。C:\Test にある MyLibrary.dll 出力ファイルのサイズが 64 KB を超えていることを確認します。

出力フォルダを共有している場合

  1. Visual Studio .NET を起動し、前の手順で作成した MyLibrary クラス ライブラリのプロジェクトを読み込みます。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [Visual C# プロジェクト]、[コンソール アプリケーション] を順にクリックします。
  4. [プロジェクト名] ボックスに ConApp と入力します。[場所] ボックスに C:\Test と入力します。
  5. [ソリューションに追加] をクリックし、[OK] をクリックします。
  6. ConApp の [出力パス] ボックスの設定を C:\Test に変更します。
  7. [プロジェクト] メニューの [参照の追加] をクリックします。[プロジェクト] タブで [選択] をクリックします。[OK] をクリックして MyLibrary プロジェクトへの参照を追加します。
  8. [プロジェクト] メニューの [スタートアップ プロジェクトに設定] をクリックして、ConApp をスタートアップ プロジェクトに設定します。
  9. ソリューション エクスプローラで、[Class1.cs] をダブルクリックして ConApp プロジェクトのデフォルト クラスのコード ウィンドウを開きます。
  10. 次のコードを ConApp の Main メソッドに追加します。
    MyLibrary.Class1 o = new MyLibrary.Class1();
    o.MyMethod();
    					
  11. [ビルド] メニューの [ConApp のビルド] をクリックします。

    ビルドが正常終了します。
  12. MyLibrary プロジェクトの [Class1.cs] を開き、次のコードを 1 行削除します。
    Console.Write(".");
    [Class1.cs] を保存します。
  13. 手順 11. を繰り返します。

    この資料の「現象」に記載したエラー メッセージのいずれかが表示されます。

"ローカル コピー" プロパティを False に設定している場合

: 「出力フォルダを共有している場合」の手順を実行した場合は、MyLibrary.dll が Visual Studio .NET によってロックされます。「"ローカル コピー" プロパティを False に設定している場合」の手順を実行するには、Visual Studio .NET を終了して C:\Test\MyLibrary\obj フォルダを削除する必要があります。
  1. C:\Test2 という名前の新規フォルダを作成します。
  2. Visual Studio .NET の新しいインスタンスを起動し、MyLibrary クラス ライブラリのプロジェクトを読み込みます。ソリューションに ConApp プロジェクトが読み込まれていないことを確認します。
  3. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C# プロジェクト]、[コンソール アプリケーション] を順にクリックします。
  4. [プロジェクト名] ボックスに ConApp2 と入力します。[場所] ボックスに C:\Test2 と入力します。
  5. [ソリューションに追加] をクリックし、[OK] をクリックします。
  6. [プロジェクト] メニューの [参照の追加] をクリックします。[プロジェクト] タブで [選択] をクリックします。[OK] をクリックして MyLibrary プロジェクトへの参照を追加します。
  7. [プロジェクト] メニューの [スタートアップ プロジェクトに設定] をクリックして、ConApp2 をスタートアップ プロジェクトに設定します。
  8. ソリューション エクスプローラで、ConApp2 プロジェクトの MyLibrary の参照設定をクリックし、MyLibrary の "ローカル コピー" プロパティを False に設定します。これにより、ConApp2 のローカルの Bin フォルダにコピーされている MyLibrary.dll ファイルのコピーが削除されます。
  9. ソリューション エクスプローラで、[Class1.cs] をダブルクリックして、ConApp2 プロジェクトのデフォルト クラスのコード ウィンドウを開きます。
  10. 次のコードを ConApp2 の Main メソッドに追加します。
    MyLibrary.Class1 o = new MyLibrary.Class1();
    o.MyMethod();
    					
  11. [ビルド] メニューの [ConApp2 のビルド] をクリックします。

    ビルドが正常終了します。
  12. MyLibrary プロジェクトの [Class1.cs] を開き、次のコードを 1 行削除します。
    Console.Write(".");
    [Class1.cs] を保存します。
  13. 手順 11. を繰り返します。

    この資料の「現象」に記載したエラー メッセージのいずれかが表示されます。
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
311491 Visual Studio .NET でエラー "一時ファイルを出力ディレクトリにコピーできませんでした" が表示される

プロパティ

文書番号: 313512 - 最終更新日: 2005年11月21日 - リビジョン: 7.3
この資料は以下の製品について記述したものです。
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
キーワード:?
kbvs2002sp1sweep kbfix kbbug kberrmsg kbprod2web KB313512
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com