通过Nant或VS2010自定义MSDeploy的属性

时间:2011-08-04 10:49:27

标签: visual-studio-2010 msbuild nant msdeploy

我有一个我想使用MSDeploy部署的Web应用程序。 我有一个运行MSBuild的Nant脚本,并将属性DeployOnBuild设置为true。它创建了我在服务器上使用的部署包。

我想要做的是避免MSDeploy在部署新文件之前删除目标文件夹的内容。我可以手动添加-enableRule:DoNotDeleteRule到我的命令行,但我希望MSDeploy手动完成。我真的需要一些帮助。

我正在使用Visual Studio 2010,如果有办法从那里进行此设置,那将是最佳选择。如果从南特那里做到这一点也很棒。

要点: 通过Nant使用MSBuild创建的部署包默认情况下应该具有标志-enableRule:DoNotDeleteRule。

2 个答案:

答案 0 :(得分:3)

在项目或共享导入文件中将属性$(SkipExtraFilesOnServer)设置为值“true”,

<PropertyGroup>
   <SkipExtraFilesOnServer>true</SkipExtraFilesOnServer>
</PropertyGroup>

或在Nant的命令行中,

/p:SkipExtraFilesOnServer=true

请参阅文件Microsoft.Web.Publishing.targets(搜索“MSDeploy”)以获取更多选项。

答案 1 :(得分:1)

我们最终使用Nant命令创建bat文件,然后我们将-enableRule添加到该文件中的命令:

<echo file="..\..\Packages\${stage}\${project::get-name()}.${stage}.Run.TestDeploy.bat">
        %CD%\${project::get-name()}.${stage}.deploy.cmd /T -enableRule:DoNotDeleteRule
        PAUSE
    </echo>

    <echo file="..\..\Packages\${stage}\${project::get-name()}.${stage}.Run.REALDEPLOY.bat">
        %CD%\${project::get-name()}.${stage}.deploy.cmd /Y -enableRule:DoNotDeleteRule
        PAUSE
    </echo>

在MSDeploy中使用/ T和/ Y标志来了解您是否正在测试脚本(/ T),或者您是否正在运行它(/ Y)。

这是一种解决方法,但我们对此感到满意。