我使用以下脚本将 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 部署创建该文件夹。我不希望它从我的网络服务器中删除文件夹/子文件夹/文件,因为它包含用户上传的内容。
澄清#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 将文件夹添加到包中:空文件夹将被忽略。
我已经测试了这种方法,当您按照您所展示的方式运行发布时,它可以正常工作。我用过this answer 使 msbuild 项目语法正确。我相信,这是一种 MSBuild 自定义标志的方法,通过 MSBuild 部署管道传递给 webdeploy。
如果您直接运行 MSDeploy,则可以按以下方式使用跳过参数:
-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'
更新2
您可能还想在\Uploads 文件夹上设置 ACL 写入权限 - 有完整的指南可以执行此操作:Setting Folder Permissions On Web Publish
考虑到最初的问题“指定文件夹不在 Web 部署中同步”,最简单的方法如下:
您可以创建发布配置文件并添加以下行:
<PropertyGroup>
<ExcludeFilesFromDeployment>
File1.aspx;File2.aspx
</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>
Folder1;Folder2
</ExcludeFoldersFromDeployment>
</PropertyGroup>
我已经测试了这种使用发布配置文件排除文件的方法。一个简单的指南是 here (滚动到编辑 .pubxml 文件以排除 robots.txt 部分)。
您还可以在 .wpp.targets 文件中执行此操作或编辑 csproj。查看更多信息Web Deployment FAQ for Visual Studio and ASP.NET
关于asp.net - 指定不在 Web 部署中同步的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245239/