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 回答