我刚写了一篇博客来回答这个问题,链接是
http://sedodream.com/2012/08/20/WebDeployMSDeployHowToSyncAFolder.aspx。从你的问题看来,你似乎对 MSDeploy 很熟悉,所以答案可能有点冗长,但我希望那些对 MSDeploy 知识较少的人也能理解。下面是我的回答。
Web Deploy(又称 MSDeploy)使用提供程序模型,内置了
许多提供程序。举个例子,同步 IIS Web 应用程序时,您将使用 iisApp;同步 MSDeploy 包时,您将使用 package;同步 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 路径是 '
sayedupdemo/files-to-pub'。现在我们得到了这个结果。
msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files-to-pub'
对于dest值,我们没有给出任何参数来指示这些命令应该发送到哪个服务器。我们需要添加这些参数。通常需要传递的参数是:
- ComputerName - 这是处理发布操作的URL或计算机名称
- Username - 用户名
- Password - 密码
- AuthType - 要使用的authType。可以是NTLM或Basic。对于WMSvc,通常是Basic,对于远程代理服务,通常是NTLM
在我的情况下,我正在发布到Windows Azure Web Site。因此,我将使用以下值:
所有这些值都可以在 .publishSettings 文件中找到(可从 WindowsAzure.com 的 Web Site 仪表板下载)。对于 计算机名称 值,您需要添加站点的名称以获取完整的 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
参数来执行它。这将为我提供操作的摘要,而不会实际引起任何更改。当我执行此操作时,结果如下图所示。
![msdeploy result](https://istack.dev59.com/IdD9H.webp)
在我确认所有更改都是有意的之后,我删除了 -whatif
并执行了该命令。之后,本地文件被发布到远程服务器。现在,我已经同步了文件,每次发布后只会发布更改的文件。
如果您想学习如何同步单个文件,可以查看我的先前博客文章:如何在发布期间使您的 Web 应用程序脱机。
dest:auto
在您的情况下,我注意到您正在使用 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$'
-source:contentPath="C:\temp\files-to-pub"
. 你如何获取该文件夹:它是在命令MSBuild.exe D:\Web.csproj /T:Package /P:Configuration=Release
中创建的吗? - Nevin Raj VictorContent
来包含它,即<Content Include="**/*" />
,并在构建过程中将该.csproj文件复制到 HTML 文件夹的根目录下并运行 WebDeploy 以实现我的目标。简单而有效。 - Warren