有没有人有过在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" />
Label.resx导致$(IntermediateOutputPath)\ Resources文件夹之后没有转换。我也不确定这是否是我将输出转换结果的位置,因为Lable.resx最终应该是一个嵌入式resorce。
感谢任何帮助
答案 0 :(得分: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时,我的已转换资源文件将被选中。