我坚持在Silverlight项目中转换配置文件(即ServiceReferences.ClientConfig
- 文件)。我已经关注了如何手动编辑.csproj文件以添加转换文件的一些来源(例如this source),但我无法让它在我们的CI服务器上运行。
.csproj文件的更改为:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="BeforeBuild" Condition="exists('ServiceReferences.$(Configuration).ClientConfig')">
<TransformXml Source="ServiceReferences.ClientConfig" Destination="$(TargetDir)\ServiceReferences.ClientConfig" Transform="ServiceReferences.$(Configuration).ClientConfig" />
<ItemGroup>
<Content Remove="ServiceReferences.ClientConfig" />
<ContentWithTargetPath Include="$(TargetDir)\ServiceReferences.ClientConfig">
<TargetPath>ServiceReferences.ClientConfig</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
</Target>
<Target Name="AfterBuild" />
如果我在我的本地客户端上的VS2010中构建我的Silverlight项目,我的配置文件转换工作正常。我可以打开生成的XAP文件并查看ServiceReferences.ClientConfig
并看到它已被转换。因此,我将转换文件排除在外。
但是当我在CI服务器上构建Silverlight项目时,ServiceReferences.ClientConfig
在CI服务器上生成的XAP文件中仍然未转换。
关于构建定义,据我所知,我还可以。 DeployConfiguration
部分中的Processes
设置为有效配置。 (如果我将此条目中的配置名称更改为无效的内容 - CI服务器将会抱怨。因此它到目前为止工作......)同一部分中的Transform Configuration Files
设置为true。
任何想法都将不胜感激!
答案 0 :(得分:0)
我自己发现了问题 - 问题是我很蠢。
基本上,解决方案中Active Solution Configuration的名称是正确的,即ProductionTest
。转换文件的名称为ServiceReferences.ProductionTest.ClientConfig
。到现在为止还挺好。但是,Silverlight项目的项目配置的名称为Release
。因此,TransformXML尝试使用(不存在的)转换文件ServiceReferences.Release.ClientConfig
。由于正确的配置文件的存在是BeforeBuild
的条件,因此TransformXML永远不会执行 - 我也不会有任何错误消息。
将项目配置更改为ProductionTest
解决了所有问题。