尝试在XAP文件中包含已转换的App.config

时间:2011-09-08 07:34:55

标签: silverlight-4.0 msbuild

我有一个包含多个配置文件的Silverlight项目,并使用此处显示的转换方法:

App.Config Transformation for projects which are not Web Projects in Visual Studio 2010?

但这种方法对Silverlight项目不起作用。我重写了MSBuild项目,看起来像这样:

<ItemGroup>
  <None Include="App.config" />
  <None Include="App.QABuild.config">
   <DependentUpon>App.config</DependentUpon>
  </None>
</ItemGroup>

....

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

<Target Name="BeforeCompile" Condition="Exists('App.$(Configuration).config')">
  <!-- Generate transformed app config in the output directory -->
  <Message Importance="high" Text="Transforming 'App.$(Configuration).config' to output config file..." />
  <TransformXml Source="App.config" Destination="$(OutputPath)App.config" Transform="App.$(Configuration).config" />

  <ItemGroup>
    <Content Include="$(OutputPath)App.config" />
  </ItemGroup>
</Target>

<Target Name="BeforeCompile" Condition="!Exists('App.$(Configuration).config')">
  <Message Importance="high" Text="Using default 'App.config' as output config file..." />
  <Copy SourceFiles="App.config" DestinationFiles="$(OutputPath)App.config" />

  <ItemGroup>
    <Content Include="$(OutputPath)App.config" />
  </ItemGroup>
</Target>

此代码为正确的配置生成正确的输出文件,但它永远不会包含在XAP文件中,即使我将输出配置放入Content项目组。我需要做的就是让输出配置包含在输出XAP中,但我无法实现这一点。

谁能告诉我我做错了什么?我无论如何都不是MSBuild专家!

1 个答案:

答案 0 :(得分:0)

通过挖掘Silverlight 4目标找到解决方案。事实证明,XAP打包程序目标实际上是一个名为XapFilesInputCollection的项目,它是输入文件的来源。内容项看起来像是在我的目标运行之前复制到此项目,因此之后修改内容项是错误的方法。

我所做的只是将转换后的文件直接添加到XapFilesInputCollection项目中,它按预期工作。