[visual-studio] Visual Studio의 웹 사이트 게시에서 파일 제외

Visual Studio 2005에서 웹 사이트를 게시 할 때 폴더 또는 파일을 제외 할 수 있습니까? 다양한 환경에 대한 대체 구성 파일과 같이 솔루션 탐색기에 보관하고 싶은 다양한 리소스가 있지만 실제로 서버에 게시하고 싶지는 않습니다. 그들을 제외하는 방법이 있습니까? .dll 어셈블리와 같은 다른 프로젝트 유형을 사용하는 경우 파일의 빌드 작업 속성을 “없음”으로 설정하고 출력 디렉터리에 복사 속성을 “복사 안 함”으로 설정할 수 있습니다. 웹 사이트에서 파일에 대한 유사한 설정을 찾을 수 없습니다.

IDE에서이 기능을 제공하지 않는 경우 이러한 파일을 처리하는 데 좋은 기술이있는 사람이 있습니까?



답변

확장자를 기반으로 파일을 식별 할 수 있는 경우 web.configbuildproviders 태그를 사용하여 이를 구성 할 수 있습니다 . 확장을 추가하고 ForceCopyBuildProvider에 매핑합니다. 예를 들어 게시 작업으로 복사 할 .xml 파일을 구성하려면 다음을 수행합니다.

<configuration>...
    <system.web>...
        <compilation>...
            <buildProviders>
                <remove extension=".xml" />
                <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
            </buildProviders>

지정된 파일이 복사되지 않도록하려면 동일한 작업을 수행하지만 System.Web.Compilation.IgnoreFileBuildProvider를 형식으로 사용합니다.


답변

프로젝트 파일 (.csproj, .vbproj 등)에 ExcludeFilesFromDeploymentExcludeFoldersFromDeployment요소를 추가하여 파일과 폴더를 제외합니다 . 프로젝트를 언로드 한 다음 편집하여 텍스트 편집기 또는 Visual Studio에서 파일을 편집해야합니다.

PropertyGroup아래와 같이 적절한 (디버그, 릴리스 등) 내의 아무 곳에 나 태그를 추가합니다 .

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment>
  <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>
</PropertyGroup>

와일드 카드가 지원됩니다.

위의 예를 설명하려면 :

  • 첫 번째 ExcludeFilesFromDeployment제외 File1.aspx(프로젝트 루트에 있음) 및 Folder2\File2.aspx( Folder2은 프로젝트 루트에 있음)
  • 두 번째는 ExcludeFilesFromDeployment이름이 지정된 폴더 .svn와 하위 폴더 내의 모든 파일을 제외합니다.
  • ExcludeFoldersFromDeployment제외라는 이름의 폴더 Folder1(프로젝트의 루트에) 및 Folder2\Folder2a( Folder2프로젝트의 루트에)

자세한 내용은 MSDN 블로그 게시물 웹 배포 : 웹 응용 프로그램의 프로젝트 파일을 통해 파일 및 폴더 제외를 참조하십시오 .


답변

놀랍게도 Visual Studio 2012에 대한 답은 여기에 없습니다.

  • 녹색 체크 표시가있는 답은 답이 아닙니다.

  • 가장 높은 “제공된”답변은 2010 년의 기사를 참조하며 현재 잘못된 csproj 프로젝트 파일을 편집해야한다고 말합니다. ExcludeFoldersFromDeployment XML 요소를 Visual Studio 2012 csproj 파일에 추가했지만 아무 작업도 수행하지 않고 요소가 잘못된 것으로 간주되었습니다 .ExcludeFoldersFromDeployment가 보이는 .pubxml 파일로 이동 되었기 때문입니다.

웹 응용 프로그램 및 웹 사이트의 경우 .pubxml 파일을 편집합니다!

내 대답을 따르거나 나중에 찾은이 가이드를 사용해 볼 수 있습니다.
http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure- on-iis-and-skip-deleting-it-with-msdeployskiprules.html # sthash.MSsQD8U1.dpbs

예, 웹 사이트 프로젝트뿐만 아니라 웹 사이트에서도이 작업을 수행 할 수 있습니다. 저는 인터넷에서 Visual Studio 웹 사이트 (웹 사이트 프로젝트가 아님)에서이 찾기 어려운 제외 기능을 찾기 위해 오랜 시간을 보냈으며 이전에 이것이 불가능하다고 결론을 내렸지 만 다음과 같이 보입니다.

~ / Properties / PublishProfiles for Web Application Projects 및 ~ / App_Data / PublishProfiles for Websites에있는 [mypublishwebsitename] .pubxml 파일에서 다음을 추가하면됩니다.

  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment>
 <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>

<PropertyGroup>.pubxml 파일 의 기본 요소에 대한 자식으로. 릴리스 또는 디버그와 같은 특정 빌드 유형을 입력하지 않는 한 새 요소를 추가 할 필요가 없습니다.

하지만 기다려!!!

게시 구성에서 다음 설정을 사용하여 대상 / 대상 서버에서 파일을 제거하는 경우 :

여기에 이미지 설명 입력

그런 다음 웹 게시 프로세스는 소스 / 대상 서버에서 제외 된 항목 (예 : <ExcludeFoldersFromDeployment><ExcludeFilesFromDeployment>!

MsDeploy 건너 뛰기 규칙을 구출하십시오.

첫째, Web Publish는 게시 할 때 MSBuild가 아닌 다른 것을 사용하지만 (작업 IO 또는 이와 유사한 것) 버그가 있으며 건너 뛰기 규칙을 인식하지 않으므로 .pubxml에 추가해야합니다.

<PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>

나는 계속 것 <WebPublishMethod>자체에 <PropertyGroup>당신은 당신이 하나 개있을 수 있다고 생각 것, <PropertyGroup>내가 이동 될 때까지 호출되는되지 않은 사용자의 .pubxml하지만 내 건너 뛰기 규칙의 요소를 <WebPublishMethod>그 자체로 <PropertyGroup>요소입니다. 예, 미쳤습니다.하지만 Web Publish가 서버에서 폴더 / 파일을 제외하고 삭제하지 않기 위해이 모든 작업을 수행해야한다는 사실은 미쳤습니다.

이제 내 .pubxml의 실제 SkipRules, ExcludeFolders 및 ExcludeFiles 선언 :

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
 <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>

이제 건너 뛰기 규칙 ( <Target><Project>.pubxml 의 자식 임) : ( 모든 작업에 대해 건너 뛰기 위해 비워 둘 수 <SkipAction>있지만 테스트하지 않았으며 확실하지 않습니다.

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipConfigFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipPhotosFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

그리고 .백 슬래시로 filePath Skip 규칙 을 이스케이프하는 것을 잊지 마십시오 .


답변

나는 같은 문제로 어려움을 겪고 마침내 웹 사이트를 웹 애플리케이션으로 변환하는 방아쇠를 당겼다. 이 작업을 수행하면 빌드 작업과 같은 모든 IDE 이점을 얻었으며 부팅 속도가 더 빨라졌습니다 (웹 사이트 유효성 검사가 더 이상 필요 없음 …).

1 단계 : ‘웹 사이트’를 ‘웹 애플리케이션’으로 변환합니다. 이를 변환하기 위해 방금 새로운 “웹 응용 프로그램”을 만들고 자동으로 생성 된 모든 파일을 날려 버리고 내 웹 사이트를 복사하여 붙여 넣었습니다. 이것은 잘 작동했습니다. 보고서 파일의 빌드 동작은 “없음”대신 “콘텐츠”로 설정해야합니다.

2 단계 : 이제 모든 파일 “Build Action”속성을 설정할 수 있습니다.

도움이 되었기를 바랍니다.


답변

Visual Studio 2013 ExcludeFoldersFromDeployment에서 프로젝트 파일에 요소를 추가하는 Keith의 대답이 작동하지 않는 것을 발견했습니다 (Brian Ogden의 대답을 읽지 않았습니다). 그러나 텍스트 파일 자체에 다음 속성을 설정하기 만하면 Visual Studio 2013에서 게시 할 때 텍스트 파일을 제외 할 수 있습니다.

1) 빌드 작업 : 없음

2) 출력 디렉토리에 복사 : 복사 안함

처음에는 Copy to Output Directory 속성을 자체적으로 설정하려고했지만 빌드 작업이 기본값 인 Content로 설정되어 있으면 작동하지 않았습니다. 그런 다음 빌드 작업을 없음으로 설정하면 게시 할 때 텍스트 파일이 더 이상 대상 폴더에 복사되지 않았습니다.

Visual Studio GUI에서 이러한 속성을 보려면 솔루션 탐색기에서 제외 할 파일을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 속성을 선택합니다.


답변

여기에는 두 가지 옵션 만 있다고 생각합니다.

  • ‘프로젝트에서 제외’기능을 사용하십시오. 프로젝트 항목이 통합 IDE 소스 제어 작업에서 제외되므로 이상적이지 않습니다. 솔루션 탐색기에서 파일을 확인해야하는 경우 솔루션 창에서 ‘모든 파일 표시’버튼을 클릭해야하지만 관심이없는 파일과 폴더도 표시됩니다.
  • 빌드 후 이벤트 스크립트를 사용하여 게시하지 않을 프로젝트 항목을 제거합니다 (로컬 폴더에 게시 한 다음 서버에 업로드한다고 가정).

나는 전에 이것을 겪어 보았고 정말로 우아한 것을 생각할 수 없었습니다.


답변

Visual Studio 2017, WebApp Publish의 경우 먼저 표준 파일 시스템 게시 프로필을 만듭니다. App_Data \ PublishProfiles \ 폴더로 이동하여 [profilename] .pubxml 파일을 편집하십시오.

더하다

<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>

태그 아래에 <PropertyGroup>
당신은 한 번이 태그를 지정할 수 있습니다 그렇지 않으면 마지막 하나의 값을 가질 것이다.

예:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>C:\inetput\mysite</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code\DevClass.cs;</ExcludeFilesFromDeployment>
  </PropertyGroup>
</Project>

태그 DeleteExistingFiles가 False 로 설정되어 있는지 확인하십시오.