2013-03-27 31 views
1

我有以下的构建目标设定做我展开时发布,由Hanselman在他的Tiny Happy Features #3提到,在许多其他地方也记作什么,我认为是推荐的方法:MSDeploy通过的MSBuild复制所有文件,而不是同步文件

msbuild my_web_application.csproj /p:Configuration=Production; 
            DeployOnBuild=true; 
            PublishProfile=Production; 
            VisualStudioVersion=11.0; 
            AllowUntrustedCertificate=true; 
            AuthType=NTLM 

这做这项工作,并替换部署一步,我以前通过调用MS命令行上部署有:

msdeploy.exe" -source:package="c:\source_to_my_web_application.zip" -dest:auto,my_server_name,includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"c:\source_to_my_web_application\Package.SetParameters.xml" 

我可以在这两种方法中看到的最大的区别是,命令行调用只会pu sh修改有修改的文件,而msbuild调用每次都通过整个Web应用程序发送。

有没有办法让msbuild版本做“同步”行为,就像直接调用msdeploy为我做的那样?

回答

0

从我已经能够建立,从包(如为这个特定的MSBuild命令创建一个)的同步将发现它试图部署的本地工作副本相关的差异。

如果我做了一个新的签出,然后构建和部署,它会发布整个Web应用程序。

如果我在该工作副本上进行清理并重建,它将只发布重建的dll。

如果我做了一个构建,它只会发布已转换的web.config文件,以及其他一些随机dll,我无法使用韵或理由。

我猜,我们的底线是,在我们的CI服务器设置中,应该假定所有文件都将发布到服务器上,如果发布次数少于此次数,它就是带宽奖金。

作为一个方面说明,我也遇到了随机,不可靠的404错误,同时执行其他正常的ms部署命令。他们似乎是间歇性的,可以在我自己的工作站,我的同事和CI服务器之间有所不同,这样MS Deploy服务将在每次连续呼叫几秒钟内返回一个404或执行正常。我发现这种行为的解决方案从重新启动Visual Studio到卸载并重新安装各种组件,并确保您按照正确的顺序执行,并且只有以“ary”结尾的任何月份的第三周的第二个星期二。 ..

对我来说,这个工具是粗略的,如果你能得到一个可靠的工作设置,这是一个奇迹,你不应该再次触摸它,并祈祷硅神它保持这种状态。