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)에 저장하면 문제를 해결할 수 있습니다.
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 을 합니다.MsDeploySkipRules
svroj서에에서.
<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>
이렇게 하면 많은 파일을 복사할 수 있기 때문에 적합하지 않습니다(그렇지 않습니다). 하지만 여기 폴더를 백업하기 위한 솔루션이 있습니다.게시 프로세스 중에 폴더를 게시할 위치로 이동하도록 조정됩니다.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
'code' 카테고리의 다른 글
기본적으로 int가 아닌 정수 리터럴 유형? (0) | 2023.08.26 |
---|---|
Python에서 목록을 "멋지게" 인쇄하는 방법 (0) | 2023.08.26 |
PowerShell의 URL에서 도메인 가져오기 (0) | 2023.08.26 |
원격 Git 분기를 삭제할 때 "오류: 정규화되지 않은 대상으로 푸시할 수 없습니다" (0) | 2023.08.26 |
Docker-Swarm, Kubernetes, Mesos 및 Core-OS 함대 (0) | 2023.08.21 |