6

構成に応じて、2つの異なるディレクトリからCSPROJにリソースを埋め込もうとしています。この投稿は私にアイデアを与えましたが、それは機能していません。どんな助けでも大歓迎です。

<Choose>
  <When Condition="'$(Configuration)' == 'Debug'">
    <ItemGroup>
      <EmbeddedResource Include="..\Debug\file.txt">
        <Link>Files\file.txt</Link>
      </EmbeddedResource>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <EmbeddedResource Include="..\Release\file.txt">
        <Link>Files\file.txt</Link>
      </EmbeddedResource>
    </ItemGroup>
  </Otherwise>
</Choose>

私もこれを試しましたが、同じようにうまくいきませんでした。

<ItemGroup>
  <EmbeddedResource Include="..\$(Configuration)\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>
4

2 に答える 2

4

ItemGroup要素に条件を設定するだけで済みます。

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <EmbeddedResource Include="..\Debug\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <EmbeddedResource Include="..\Release\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>
于 2013-01-08T21:34:38.110 に答える
3

あなたの質問へのコメントで言ったように、これはあなたのために働くはずです:

<ItemGroup>
  <EmbeddedResource Include="..\$(Configuration)\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>

VS のプロパティ エディターの「フル パス」に古い値が表示される場合がありますが、ビルドすると、現在の構成が考慮されます。VS Property Editor は、最悪の場合、ソリューション エクスプローラーの [更新] ボタンまたはプロジェクトの再読み込みで更新する必要があります。選択を他のファイルに変更し、file.txt に戻るだけで、プロパティ エディタを更新できます。

更新

ソリューション エクスプローラーの [更新] ボタンを押すと、どの場合にフル パスが変更されたかがわかります。これは Dll リファレンスのヒント パスです。

<Reference Include="MyDll">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\$(Configuration)\MyDll.dll</HintPath>
</Reference>

これは、すべての DLL (すべてのターゲット フォルダー内) が実際に存在する場合にのみ機能します。

何らかの理由で、アイテム ファイルのフル パスが更新されない - ファイル アイテムの場合、VS は常に現在の構成が Debug という名前であると考えます-プロジェクトからデバッグ構成を削除しても。幸いなことに、この VS バグはビルドには影響しません - それでも有効なファイルが必要です。

于 2013-01-08T21:37:30.127 に答える