我刚刚在http://sedodream.com/2012/08/20/WebDeployMSDeployHowToSyncAFolder.aspx写了一篇博文来回答这个问题。从您的问题来看,您似乎对 MSDeploy 非常熟悉,因此答案可能有点冗长,但我希望对 MSDeploy 了解较少的人能够理解。我在下面粘贴了答案。
Web Deploy(又名 MSDeploy)使用提供程序模型,并且有大量可用的提供程序。为您提供一些提供者的示例;同步 IIS Web 应用程序时,您将使用 iisApp,对于 MSDeploy 包,您将使用包,对于 Web 服务器 webServer 等。如果要将本地文件夹同步到远程 IIS 路径,则可以使用contentPath提供程序。您还可以使用此提供程序将文件夹从一个网站同步到另一个网站。
在这种情况下,我们想要做的一般想法是将文件夹从您的 PC 同步到您的 IIS 网站。对 msdeploy.exe 的调用可能有点冗长,所以让我们一步一步构建命令。我们将使用下面的模板。
msdeploy.exe -verb:sync -source:contentPath="" -dest:contentPath=""
我们使用同步动词来描述我们正在尝试做的事情,然后将 contentPath 提供程序用于源和目标。现在让我们填写这些值应该是什么。对于源值,您需要传入要同步的文件夹的完整路径。在我的情况下,文件位于C:\temp\files-to-pub。对于 dest 值,您将提供文件夹路径作为 IIS 路径。在我的例子中,我正在同步的网站被命名为 sayedupdemo,所以我想要同步的 IIS 路径是'<em>sayedupdemo/files-to-pub'。现在给我们。
msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files-to-pub'
对于 dest 值,我们没有给出任何参数来指示这些命令应该发送到哪个服务器。我们需要添加这些参数。通常需要传入的参数是。
- ComputerName – 这是处理发布操作的 URL 或计算机名称
- 用户名——用户名
- 密码——密码
- AuthType –要使用的authType 。NTLM 或基本。对于 WMSvc,这通常是 Basic,对于 Remote Agent Service,这通常是 NTLM
就我而言,我正在发布到Windows Azure 网站。所以我将使用的值是:
所有这些值都可以在 .publishSettings 文件中找到(可以从 WindowsAzure.com 的网站仪表板下载)。对于ComputerName值,您需要附加站点名称以获取完整 URL。在上面我手动添加的示例?site=sayedupdemo
中,这与 Azure 门户中显示的名称相同。所以现在我们拥有的命令是。
msdeploy.exe
–verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:contentPath='sayedupdemo/files-to-pub'
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
好的,我们快到了!就我而言,我想确保在此过程中不会从服务器中删除任何文件。所以我也会补充–enableRule:DoNotDeleteRule
。所以我们的命令是现在。
msdeploy.exe
–verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:contentPath='sayedupdemo/files-to-pub'
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
-enableRule:DoNotDeleteRule
此时,在执行此命令之前,我将首先通过–whatif
. 这将给我一个总结,哪些操作将不会实际引起任何变化。当我这样做时,结果如下图所示。
在我验证这些更改都是故意的之后,我删除了–whatif
并执行了命令。之后,本地文件被发布到远程服务器。现在我已经同步了每次发布的文件,这将导致只发布更改的文件。
如果您想了解如何同步单个文件,您可以查看我之前的博客文章如何在发布期间使您的 Web 应用程序脱机。
目的地:汽车
在您的情况下,我注意到您正在使用dest:auto
,您可以使用它,但您必须将 IIS 应用程序名称作为参数传递,它将替换文件夹的路径。下面是命令。
msdeploy.exe
-verb:sync
-source:contentPath="C:\temp\files-to-pub"
-dest:auto
,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
,UserName='$sayedupdemo'
,Password='thisIsNotMyRealPassword'
,AuthType='Basic'
-enableRule:DoNotDeleteRule
-setParam:value='sayedupdemo',kind=ProviderPath,scope=contentPath,match='^C:\\temp\\files-to-pub$'