IT story

MSDeploy (Visual Studio)를 App_Data 폴더를 삭제하지 않고 나머지는 모두 삭제합니다.

hot-time 2020. 12. 30. 19:18
반응형

MSDeploy (Visual Studio)를 App_Data 폴더를 삭제하지 않고 나머지는 모두 삭제합니다.


Visual Studio의 Publish단추를 사용하여 웹 사이트를 배포하고 서버에 다른 App_Data 폴더를 원합니다. Leave extra files on destination (do not delete)내 App_Data 폴더가 삭제되는 것을 방지 하는 확인란이 있지만 웹 사이트가 변경되면 결국 많은 흔적 파일이 누적됩니다.

모든 것을 삭제할 때 App_Data 만 제외하도록 만드는 방법이 있습니까?


msdeploy를 수동으로 호출 할 때 수행 할 수 있습니다. 다음 매개 변수를 추가하기 만하면됩니다.

-skip:Directory=\\App_Data

웹 배포 작업 설정을 참조하십시오 . 경로는 정규식이므로 매우 유연합니다.

VS 생성 ProjectName.deploy.cmd 스크립트를 사용하여 배포하는 경우 _MsDeployAdditionalFlags 환경 변수 (해당 스크립트를 실행할 때)에이 매개 변수를 전달할 수도 있습니다.

이것은 내가 우리의 필요에 대해 생각 해낸 최고입니다 (우리는 당신과 비슷한 상황을 가지고 있습니다). 명령 줄에서 배포하기 때문에 VS의 게시 버튼과 통합하지 않았습니다.

편집하다:

이 답변을 게시 한 후 MSDeploy에 대해 몇 가지를 배웠으므로 지금 업데이트 할 것이라고 생각했습니다.

우선, 위의 건너 뛰기 규칙은 일치하는 경로 (App_Data)에서 모든 작업을 건너 뜁니다. 더 세부적인 제어가 필요한 경우 더 자세한 구문을 사용할 수 있습니다. 예를 들어, 삭제 만 건너 뛰려면 (대상 서버에 추가 파일을 유지하지만 새 파일을 추가하고 기존 파일을 업데이트하려면) :

-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*'

이렇게하면 App_Data에서 모든 파일 및 모든 하위 폴더 (모든 콘텐츠 포함)의 삭제를 건너 뛰지 만 추가 및 업데이트를 방지하지는 않습니다.

또 다른 유용한 점은 프로젝트 파일 ( .csproj) 에서 건너 뛰기 규칙을 정의 .deploy.cmd하여 패키지와 함께 생성 된 스크립트에 자동으로 포함되도록 할 수 있다는 것 입니다. 이렇게하면 _MsDeployAdditionalFlags를 통해 스크립트에 전달할 필요가 없습니다.

다음이 csproj파일에 포함되면 위의 건너 뛰기 규칙이 추가됩니다 .

<PropertyGroup>
  <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
  <ItemGroup>
    <MsDeploySkipRules Include="SkipDeleteAppData">
      <SkipAction>Delete</SkipAction>
      <ObjectName>filePath</ObjectName>
      <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
      <XPath>
      </XPath>
    </MsDeploySkipRules>
    <MsDeploySkipRules Include="SkipDeleteAppData">
      <SkipAction>Delete</SkipAction>
      <ObjectName>dirPath</ObjectName>
      <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
      <XPath>
      </XPath>
    </MsDeploySkipRules>
  </ItemGroup>
</Target>

(이름 AddCustomSkipRulesSkipDeleteAppData완전히 임의적은; $(_Escaped_PackageTempDir)하도록되어 아마도 필요하지만, 실제로 나는 항상 빈 문자열로 평가 보았다)

자세한 내용은 웹 배포 : 배포 패키지 사용자 지정.csproj 파일에서 MSDeploy 설정을 지정하는 방법을 참조하십시오.

한 가지주의 사항 :이 규칙은 .deploy.cmd스크립트에 해당 규칙 만 추가 하므로 해당 스크립트를 사용하지 않기 때문에 패키지 배포를 위해 그래픽 IIS 관리자를 사용하려는 경우 쓸모가 없습니다 (VS에서 배포 할 때도 마찬가지지만 확인하지 않음).


App_Data 폴더의 파일을 제외하도록 지정할 수 있으므로 프로젝트 설정에서 패키지 / 게시 웹을 살펴 보았습니까?


Powershell에서 웹 배포 패키지로 게시 할 때 생성 된 msdeploy.exe 또는 myproj.deploy.cmd ( 웹 패키지 배포) 를 사용하려는 경우 App_Data 폴더 삭제를 건너 뛰고

All arguments must begin with "-"

오류가 발생하면 skip 지시문을 삼중 따옴표로 묶어야합니다. 예 :

myproj.deploy.cmd /y /u:myusername /p:mypass """-skip:Directory=\\App_Data"""

내 경험상 MsDeploySkipRules명령 줄에서 배포 할 때만 실행됩니다.

Visual Studio에서 Azure로 게시하는 경우 (또는 다른 웹 배포 방법을 사용) 게시 할 때 다음을 설정할 수 있습니다.

  • 대상에서 추가 파일 제거
  • App_Data 폴더에서 파일 제외

"대상에서 추가 파일 제거"를 선택하면 배포중인 파일 및 폴더와 서버에있는 폴더를 비교합니다.

사용자 생성 콘텐츠 (예 : 업로드)가있는 경우 문제가 발생할 수 있습니다. 그러나이 폴더를 다른 위치 (예 : S3 / Azure Storage)에 저장하여 해결할 수 있습니다.

웹 게시 프로필


This isn't ideal since you may be copying a lot of files doing this (I'm not), but here's my solution for backing up a folder. Adapted to move the folder to the location from which it will be published, during the publish process. Put this in your pubxml file:

<Project>
...
<Target Name="PreserveSelectedFolder" AfterTargets="GatherAllFilesToPublish">
   <ItemGroup>
     <SITEDIR Include="$(publishUrl)\App_Data\**\*.*" />
   </ItemGroup>
   <Copy SourceFiles="@(SITEDIR)" 
      DestinationFolder="$(ProjectDir)\obj\$(Configuration)\Package\PackageTmp\%(RecursiveDir)"></Copy>
</Target>
</Project>

And if you just want to do any number of specific known files, do one Copy block per file:

<Target Name="PreserveSelectedFiles" AfterTargets="GatherAllFilesToPublish"  >
    <Copy SourceFiles="$(publishUrl)\MYFILENAME.EXT" 
      DestinationFolder="$(ProjectDir)\obj\$(Configuration)\Package\PackageTmp\" 
      Condition="Exists('$(publishUrl)\MYFILENAME.EXT')"></Copy>
</Target>

For asp.net core web apps use MsDeploySkipRules in csproj.

<ItemGroup>
  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath><dir_name>\\app_data</AbsolutePath>
  </MsDeploySkipRules>
  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>dirPath</ObjectName>
    <AbsolutePath><dir_name>\\app_data</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

Replace <dir_name> with your root folder

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.1#exclude-files


Put this in your pubxml file:

<ExcludeApp_Data>True</ExcludeApp_Data>

ReferenceURL : https://stackoverflow.com/questions/4289440/make-msdeploy-visual-studio-not-delete-app-data-folder-but-delete-everything-e

반응형