code

MSDeploy(Visual Studio)에서 App_Data 폴더를 삭제하지 않고 다른 모든 폴더를 삭제하도록 합니다.

starcafe 2023. 8. 26. 12:00
반응형

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>

(이름들)AddCustomSkipRules그리고.SkipDeleteAppData완전히 임의적입니다.$(_Escaped_PackageTempDir)필요할 수도 있지만 실제로는 항상 빈 문자열로 평가하는 것을 보았습니다.)

배포를 참조: 배포 패키지 사용자 정의 및 .csproj 파일에서 MSDeploy 설정을 설정하는 방법에 대한 자세한 내용이 나와 있습니다.

한 가지 주의할 점: 이는 이러한 규칙만 추가합니다..deploy.cmd따라서 패키지 배포에 그래픽 IIS 관리자를 사용하려는 경우에는 해당 스크립트를 사용하지 않으므로 유용하지 않습니다(VS에서 배포하는 경우에도 마찬가지일 수 있지만 확인하지 않았습니다.

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

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

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

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

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

Web Publishing Profile

powershell에서 msdeploy를 사용하려는 경우.App_Data 폴더 삭제를 건너뛰고 다음 작업을 수행하지 않으려면 exe 또는 Web Deploy Package를 사용하여 게시할 때 생성되는 myproj.deploy.cmd( 패키지 배포)

All arguments must begin with "-"

오류, 건너뛰기 지시문을 세 개의 따옴표로 묶어야 합니다. 예:

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

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

asp.net의 경우 웹 인 asp.net 을 합니다.MsDeploySkipRulessvroj서에에서.

<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>

를 바꿉니다.<dir_name>

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

이렇게 하면 많은 파일을 복사할 수 있기 때문에 적합하지 않습니다(그렇지 않습니다). 하지만 여기 폴더를 백업하기 위한 솔루션이 있습니다.게시 프로세스 중에 폴더를 게시할 위치로 이동하도록 조정됩니다.pubxml 파일에 저장합니다.

<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>

또한 알려진 특정 파일 수에 상관없이 파일당 하나의 복사 블록을 수행합니다.

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

pubxml 파일에 저장합니다.

<ExcludeApp_Data>True</ExcludeApp_Data>

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

반응형