1

私は異なるxmlを読んでいるac#プロジェクトを持っています。2 つの異なる .EXE をビルドすることに基づいて、さまざまな条件付きコンパイル シンボル セットがあります。今、私がやっていることは、条件に基づいてさまざまな xml を読み取ることです。

#if ABC_build
//read xml1
#else
//read xml2
#endif

ただし、この場合、各ビルドに両方の xml を含める必要があります。2 つまたは 3 つのタグを除いて、両方の xml は同じです。単一の xml を記述し、特定の xml タグを特定のビルドに含め、他のビルドには含めないようにコンパイラに指示する方法はありますか?

4

3 に答える 3

5

XML ファイルはコンパイルされないため、条件付きコンパイルのようなものはありません。したがって、解決しようとしている主な問題として、ビルド出力に両方の XML ファイルを含める必要があるという事実を認識しています。
できることは、構成に応じてビルドを調整することです。たとえば、デバッグ ビルドの場合はファイル A が出力フォルダーにコピーされ、リリース ビルド ファイル B の場合はファイル B がコピーされます。
これを実現するには、同様のコードを追加する必要があります。あなたのcsprojファイルに:

  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
    <XmlInput Include="FileA.xml">
      <Visible>False</Visible>
    </XmlInput>
  </ItemGroup>
  <ItemGroup Condition=" '$(Configuration)' == 'Release' ">
    <XmlInput Include="FileB.xml">
      <Visible>False</Visible>
    </XmlInput>
  </ItemGroup>
  <ItemGroup>
    <XmlOutput Include="$(OutputPath)\File.xml">
      <Visible>False</Visible>
    </XmlOutput>
  </ItemGroup>
  <Target Name="AfterBuild">
    <Copy SourceFiles="@(XmlInput)" DestinationFiles="@(XmlOutput)" />
  </Target>
  <Target Name="BeforeClean">
    <Delete Files="@(XmlOutput)" />
  </Target>

このコードは、選択した構成に依存するビルドに ItemGroup を追加します。AfterBuild ターゲットでは、ファイルが出力パスにコピーされます。BeforeClean ターゲットでは、ファイルが再度削除されます。コードでは、条件付きコンパイルはもう必要ありませんが、アクセスできる出力フォルダーに共通のファイル名があります。
サンプルでは、​​プロジェクトに 2 つの XML ファイル (FileA.xml と FileB.xml) を追加しました。コピーする正しいファイルを選択するために、それらを XmlOutput アイテムとして再度参照します。これらは Visible = false とマークされているため、ソリューション エクスプローラーには表示されません。

于 2013-11-05T10:07:51.137 に答える
0

一部の xml タグを読み取らないようにコンパイラーに指示することはできないと思います。これはコンパイル時ロジックではなく、ランタイム ロジックです。

ただし、 #if にブール論理を含めることができます

#if (ABC_build || XYZ_build)
//read xml
#endif
于 2013-11-05T09:59:46.517 に答える
0

「条件付き」XML ファイルを作成するにはさまざまな方法があります。このファイルは、指定したパラメーターに基づいてさまざまな XML ファイルを生成するために前処理されます。

1 つは、独自の「条件付きコンパイル タグ」を発明し、それらを解釈するための小さな XSLT スタイルシートを作成することです。たとえば、次のようなものがよく見られます。

<doc>
  <para use-when="windows">....</para>
  <para use-when="linux">....</para<
</doc>

また、関連するパラグラフのみを保持してドキュメントをコピーする XSLT コードを作成するのは簡単です。

多くの人が使用するもう 1 つの方法は、XML 外部エンティティです。私は個人的に、これらは少し柔軟性がないと感じています。

于 2013-11-05T12:15:57.493 に答える