指定不在Web Deploy中同步的文件夹

Mik*_*ole 15 asp.net msbuild webdeploy

我使用以下脚本将我的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
Run Code Online (Sandbox Code Playgroud)

现在我需要指定不同步/ uploads文件夹.我可以在这个脚本中指定吗?谢谢!

澄清:我的项目中有Uploads文件夹.我想让Web Deploy创建该文件夹.我不希望它从我的Web服务器中删除文件夹/子文件夹/文件,因为它包含用户上传的内容.

澄清#2:我刚刚找到了SkipExtraFilesOnServer=True选项.但是,我不希望这是全球性的.我想将它设置为一个文件夹.

Isa*_*pov 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>
    
    Run Code Online (Sandbox Code Playgroud)

改变NameOfYourFolderYourWebProjectName相应地.这假设你在根中拥有它,我相信,如果不是这样,你可以使用相对路径.

  • 第一MsDeploySkipRules项告诉webdeploy不要删除任何文件Name_OfYourFolder.
  • 第二个MsDeploySkipRules告诉webdeploy不要删除任何子文件夹中Name_OfYourFolder.

此外,要创建文件夹(如果目标服务器上不存在该文件夹),您必须执行以下操作:

  • 将文件夹包含到项目中
  • 在其中添加一个虚拟DeployemntPlaceholder.txt文件,并将其包含在项目中

需要DeployemntPlaceholder.txt来告诉MSBUild将文件夹添加到包中:忽略空文件夹.

我已经测试了这种方法,当你以你展示的方式运行发布时,它可以正常工作.我已经使用这个答案来获得msbuild项目的合成文件.我相信,这是一种自定义标志的MSBuild方法,由MSBuild Deployment Pipeline传递给webdeploy.

如果直接运行MSDeploy,则可以通过以下方式使用skip参数:

-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'
Run Code Online (Sandbox Code Playgroud)

更新2

您可能还希望在\ Uploads文件夹上设置ACL写权限 - 这是一个完整的指南来执行此操作:在Web上设置文件夹权限发布

保留原始问题"在Web部署中指定不同步的文件夹",最简单的方法如下:

您可以创建发布配置文件并添加以下行:

<PropertyGroup>
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
</PropertyGroup> 
Run Code Online (Sandbox Code Playgroud)

我已经测试了这种使用发布配置文件排除文件的方法.这里有一个简单的指南(滚动到编辑.pubxml文件以排除robots.txt部分).

您也可以在.wpp.targets文件中执行此操作或编辑csproj.有关Visual Studio和ASP.NET的Web部署常见问题,请参阅更多信息