带有Web服务的Silverlight XAP部署的自动化工具
是否有任何工具,甚至良好的流程来部署依赖这些工具的Web服务和Silverlight应用程序,并且能够自动更改配置文件中的Web服务URL和端口号?
现在,我总是发现自己必须更改服务器上的Web服务配置,然后还必须在XAP中编辑配置。在将小的迭代部署到多个服务器(测试,销售,演示,生产等)时,这很痛苦。我知道我可以编写自定义代码,但是如果可以的话,我想避免这种情况。
忘记进行更改,以后再接到测试人员的电话,这是特别痛苦的事情。
解决方案
尽管听起来我们有一个非常通用的需求,即部署工具,但实际上,我们通常会发现自己最好自己制作该工具。例如,第一个版本可能会对我们指定的配置文件执行简单的字符串替换。
然后,我们可以将其作为生成后的过程或者作为MSBuild脚本中的操作来包含。
有很多方法可以解决问题,例如,通过DSL工具建模语言对部署方案进行建模,该语言可用于代码生成所有服务配置。
因此,我的快速答案是:我认为没有任何工具可以明确满足需求。
我认为为此提供一个基于社区的工具将是很棒的。
在我工作的最后一个地方,我们创建了一个工具,该工具接受了所需的参数并对其进行了验证并进行了部署,但是它非常针对我们正在创建的产品。
如果要将Silverlight集成到构建过程中,则需要了解Chiron:
默认位置:C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v2.0 \ Tools \ Chiron
Chiron.exe将项目输出转换为.XAP文件。然后,使用Chiron,我们可以针对每个环境使用不同的配置文件,将XAP文件创建集成到自动构建中。
这就是我们在ComponentOne(Studio for Silverlight)中使用的功能。这是一个简单的方法:
public static Uri GetAbsoluteUri(string uriString) { // Convert relative into absolute if (!uriString.StartsWith("http://", StringComparison.OrdinalIgnoreCase)) { // Remove leading slashes if (uriString.StartsWith("/")) { uriString = uriString.Substring(1); } // Get current absolute URI; this depends on where the application is deployed Uri uri = System.Windows.Browser.HtmlPage.Document.DocumentUri; string uriBase = uri.AbsoluteUri.Split('#')[0]; // Replace page name with relative URI int ls = uriBase.LastIndexOf('/'); uriString = uriBase.Substring(0, ls + 1) + uriString; } // Return new URI return new Uri(uriString, UriKind.Absolute); }
然后,我们只需要使用Web服务的相对名称来调用它,即可获得绝对路径:
var uri = GetAbsoluteUri("myWebService.asmx")
对于我们的一个项目,我们的ServiceReferences文件存在类似的问题。我们的解决方案是定义多个ServiceReferences,并为每个构建配置使用.config。例如。 " ServiceReferences.ClientConfig.QaDeploy,ServiceReferences.ClientConfig.Debug等"。
然后,生成XAP的项目将具有一个构建后事件,以将适当的配置文件复制到输出位置:
copy "$(ProjectDir)servicereferences.clientconfig.$(ConfigurationName)" "$(ProjectDir)servicereferences.clientconfig" /Y
如果我们有一组固定的服务器要部署到,则也可以轻松地将其用于web.configs。