3

Visual Studio 2008 の「出力にコピー」機能に問題があります。

私は4つのプロジェクトを持つソリューションを持っています:

  • TestApp1 (Windows アプリケーション)
  • TestAppA (Windows アプリケーション)
  • TestProj1 (クラス ライブラリ)
  • TestProjA (クラス ライブラリ)

依存関係は次のとおりです (プロジェクト参照の依存関係)。

  • TestProj1 は何にも依存していません。
  • TestApp1 は TestProj1 に依存します
  • TestProjA は TestProj1 に依存します
  • TestAppA は TestProjA に依存します (したがって、間接的に TestProj1 に依存します)。

つまり、依存関係ツリーは次のようになります。

TestApp1
    TestProj1
TestProjA
    TestProj1
TestAppA
    TestProjA
        TestProj1

(各プロジェクトには、標準アセンブリ (system、system.core など) への参照もあります)

TestProj1 に、テキスト ファイル Test.txt を追加しました。このファイルのプロパティで、「ビルド アクション: コンテンツ」と「出力ディレクトリにコピー: 常にコピー」を指定しました。

ソリューションをビルドすると、Test.txt がコピーされます

  • TestApp1\bin\Debug
  • TestProj1\bin\Debug
  • TestProjA\bin\Debug

ファイルはTestAppA\bin\debug にコピーされません。TestProj1 は Test.txt に依存して動作し、TestAppA は TestProjA を介して TestProj1 に依存しているため、TestApp1 は動作しません。

TestAppA から TestProj1 に直接プロジェクト参照を追加すると (TestProj1 への参照が 1 つと TestProjA への参照がもう 1 つあるため)、ファイルは TestAppA\bin\debug フォルダーにコピーされます。

もちろん、カスタム ビルド イベントをセットアップしてファイル Test.txt を TestAppA\bin\debug にコピーすることもできますが、カスタム ビルド イベントの経験が乏しく、組み込みのコピー メカニズムに依存したいと考えています。

私の質問は、Test.txt が TestAppA\Bin\debug にコピーされないのはなぜですか?

4

2 に答える 2

4

トッドはすでによく答えていますが、これに対するさらに2つの一般的な解決策は次のとおりです。

  • Test.txt を出力フォルダーに xcopy するビルド後のステップを依存プロジェクトに追加します。
  • TestProj1 プロジェクトのアセンブリに埋め込みリソースとしてテキスト ファイルを追加し、外部データ ファイルの必要性を完全に取り除きます。

また、すべての依存関係が必要な情報を取得するために TestProj1 の API を呼び出すだけで、そのアセンブリがデータをカプセル化し、好きな場所に好きな形式で保存できるようにすることもお勧めします。

于 2009-12-12T17:07:51.503 に答える
2

Visual Studio はコンテンツ ファイルの直接参照のみを参照するため、TestAppA は TestProjA プロジェクト ファイルに Test.txt が表示されないため、Test.txt の存在を認識しません。

これは Visual Studio の制限であり、多くの人がすべてのプロジェクトの出力を同じフォルダーにポイントすることになる理由です。

もう 1 つのオプションは、「SharedContent」フォルダーを作成することです。次に、テキスト ファイルをそのフォルダーに配置し、各プロジェクトで [追加] > [既存の項目...] を選択して、それに依存する各プロジェクトに追加します。[アイテムの追加] ダイアログで、共有フォルダーからテキスト ファイルを選択し、[追加] ボタンの小さな下矢印をクリックします。「リンクとして追加」を選択すると、コピーを作成せずにファイルをプロジェクトに追加できます。

于 2009-12-12T16:56:01.863 に答える