我使用以下脚本将我的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
选项。但是,我不希望这是全球性的。我想将它设置为一个文件夹。
答案 0 :(得分:21)
<强>更新强> 显然,您真正想要的是阻止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 告诉MSBUild将文件夹添加到包中:忽略空文件夹。
我已经测试了这种方法,当你以你展示的方式运行发布时,它可以正常工作。我已经使用this answer 来正确获取msbuild项的syntaxt。我相信,这是一种自定义标志的MSBuild方法,由MSBuild Deployment Pipeline传递给webdeploy。
如果直接运行MSDeploy,可以按以下方式使用skip参数:
-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'
更新2
保留原始问题“指定不在Web Deploy中同步的文件夹”,最简单的方法如下:
您可以创建发布配置文件并添加以下行:
<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
查看更多信息