0

誰かが以前にresxファイルでxml変換を実行した経験がありますか?構成ごとにresxファイルを変換したいと思います。各構成の変換ファイルは、リソースファイルの一部の文字列値を置き換える場合があります。例えば:

<None Include="Resources\Label.Release.resx.config">
  <DependentUpon>Label.resx</DependentUpon>
</None>
<EmbeddedResource Include="Resources\Label.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>Label.Designer.cs</LastGenOutput>
</EmbeddedResource>

resxファイルのいくつかのデータ値を変換しようとしています。Label.Release.resx.cofing:

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <data name="Title" xml:space="preserve"  xdt:Locator="Match(name)">
    <value  xdt:Tranform="Replace">CEO</value>
  </data> 
</root>

BeforeBuildタスクでこれを試してみました:

<Target Name="BeforeBuild">
<MakeDir Directories="$(IntermediateOutputPath)\Resources" 
    Condition="!Exists('$(IntermediateOutputPath)\Resources')"/>
<TransformXml Source="Resources\Label.resx" Transform="Resources\Label.$(Configuration).resx.config" Destination="$(IntermediateOutputPath)\Resources\Label.resx" />

変換が行われなかった後に$(IntermediateOutputPath)\ResourcesフォルダーになるLabel.resx。また、Lable.resxは最終的に埋め込みリソースである必要があるため、それが変換結果を出力する場所であるかどうかもわかりません。

助けていただければ幸いです

4

1 に答える 1

0

これが私がやったことです:

<Target Name="TransLabel">
<MakeDir Directories="$(IntermediateOutputPath)\Resources" Condition="!Exists('$(IntermediateOutputPath)\Resources')" />
<TransformXml Source="Resources\Label.resx" Transform="Resources\Label.$(Configuration).resx.config" Destination="$(IntermediateOutputPath)\Resources\Label.resx" />
<GenerateResource Sources="$(IntermediateOutputPath)\Resources\Label.resx" OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
</GenerateResource>
<Copy OverwriteReadOnlyFiles="true" SourceFiles="$(IntermediateOutputPath)\Resources\Label.resources" DestinationFiles="$(IntermediateOutputPath)\Ccwa.Resources.Label.resources" />
<RemoveDir Directories="$(IntermediateOutputPath)\Resources" />
</Target>

<Target Name="AfterResGen">
<CallTarget Targets="TransLabel" />

通常のリソース生成プロセスが実行されているAfterResGenターゲットにフックして、resxファイルを変換します。次に、独自の変換を実行し、独自のリソースファイルを生成します。次に、変換前にすでに生成されているものを置き換えます。ビルドが続行され、プロジェクトdllが生成されると、変換されたリソースファイルが取得されます。

于 2012-08-27T18:15:05.843 に答える