我有一个包含多个配置文件的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专家!
答案 0 :(得分:0)
通过挖掘Silverlight 4目标找到解决方案。事实证明,XAP打包程序目标实际上是一个名为XapFilesInputCollection的项目,它是输入文件的来源。内容项看起来像是在我的目标运行之前复制到此项目,因此之后修改内容项是错误的方法。
我所做的只是将转换后的文件直接添加到XapFilesInputCollection项目中,它按预期工作。