在 Web Deploy 中指定不同步的文件夾
我使用以下腳本將我的 ASP.NET MVC 應用程序部署到我們的 Web 伺服器:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MySolution.sln^ /p:Configuration=TeamCity-Test^ /p:OutputPath=bin^ /p:DeployOnBuild=True^ /p:DeployTarget=MSDeployPublish^ /p:MsDeployServiceUrl=https://mywebserver.com:8172/msdeploy.axd^ /p:username=MyDomain\MyUser^ /p:password=MyPassword^ /p:AllowUntrustedCertificate=True^ /p:DeployIisAppPath=mywebsitename.com^ /p:MSDeployPublishMethod=WMSVC現在我需要指定不同步 /uploads 文件夾。我可以在這個腳本中指定嗎?謝謝!
澄清:我的項目中有 Uploads 文件夾。我想讓 Web Deploy 創建文件夾。我不希望它從我的 Web 伺服器中刪除文件夾/子文件夾/文件,因為它包含使用者上傳的內容。
澄清#2:我剛剛找到了這個
SkipExtraFilesOnServer=True選項。但是,我不希望這是全球性的。我想將其設置為單個文件夾。
更新: 顯然,您真正想要的是阻止 web 部署刪除目標伺服器上的現有目錄,但仍然創建文件夾以防它不存在。您可以按如下方式完成此操作:
- 在項目文件旁邊創建YourWebProjectName.wpp.targets文件,其中包含以下內容:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <MsDeploySkipRules Include="SkipELMAHFolderFiles"> <SkipAction></SkipAction> <ObjectName>filePath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*</AbsolutePath> <Apply>Destination</Apply> <XPath></XPath> </MsDeploySkipRules> <MsDeploySkipRules Include="SkipELMAHFolderChildFolders"> <SkipAction></SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*\\*</AbsolutePath> <Apply>Destination</Apply> <XPath></XPath> </MsDeploySkipRules> </ItemGroup> </Project>
NameOfYourFolder相應地改變YourWebProjectName。這假設您將它放在根目錄中,我相信,如果不是這種情況,您可以使用相對路徑。
- 第一個
MsDeploySkipRules條目告訴 webdeploy 不要刪除 Name_OfYourFolder 中的任何文件。- 第二個
MsDeploySkipRules告訴 webdeploy 不要刪除 Name_OfYourFolder 中的任何子文件夾。此外,如果目標伺服器上不存在該文件夾,則要創建該文件夾,您必須執行以下操作:
- 將文件夾包含到項目中
- 在其中添加一個虛擬的DeployemntPlaceholder.txt文件並將其包含到項目中
需要DeployemntPlaceholder.txt來告訴 MSBUild 將文件夾添加到包中:忽略空文件夾。
我已經測試了這種方法,當您以顯示的方式執行發佈時,它可以正常工作。我已經使用這個答案來獲得正確的 msbuild 項目語法。我相信,這是一種自定義標誌的 MSBuild 方式,由 MSBuild 部署管道傳遞給 webdeploy。
如果您直接執行 MSDeploy,則可以按以下方式使用跳過參數:
-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'更新 2
您可能還希望在您的 \Uploads 文件夾上設置 ACL 寫入權限 - 有一個完整的指南可以做到這一點:在 Web Publish 上設置文件夾權限
考慮原始問題“在 Web Deploy 中指定不同步的文件夾”,最簡單的方法如下:
您可以創建發布配置文件並添加以下行:
<PropertyGroup> <ExcludeFilesFromDeployment> File1.aspx;File2.aspx </ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment> Folder1;Folder2 </ExcludeFoldersFromDeployment> </PropertyGroup>我已經測試了這種方法來排除使用發布配置文件的文件。這裡有一個簡單的指南(滾動到編輯 .pubxml 文件以排除 robots.txt部分)。
您也可以在 .wpp.targets 文件中執行此操作或編輯您的 csproj。在Visual Studio 和 ASP.NET 的 Web 部署常見問題解答中查看更多資訊