Visual Studio의 웹 사이트 게시에서 파일 제외


79

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

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


3
: 여기 당신은 매우 간단한 솔루션을 찾을 수 있습니다 stackoverflow.com/questions/1288858/...
드미트리 MELNIK

답변:


32

확장자를 기반으로 파일을 식별 할 수 있는 경우 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를 형식으로 사용합니다.


아주 멋지다. wpp.targets 파일의 권장 ExcludeFromPackageFiles에 운이 없었습니다. 후자는 한 수준 이상의 폴더가있는 와일드 카드를 지원하지 않는 것처럼 보이므로 상당히 쓸모가 없습니다. 감사합니다
DvS 2010

128

프로젝트 파일 (.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 블로그 게시물 웹 배포 : 웹 응용 프로그램의 프로젝트 파일을 통해 파일 및 폴더 제외를 참조하십시오 .


1
이것으로 와일드 카드를 사용하는 방법이 있습니까?
roydukkey

4
게시하는 동안 Web.config 파일을 제외하고 싶기 때문에 이것은 저에게 허용되는 대답보다 훨씬 낫습니다!
Michael Eakins

6
"웹 사이트"유형 프로젝트에서이 코드 조각은 ~ / App_Data / PublishProfiles /에있는 * .pubxml 파일에 추가됩니다.
laylarenee

4
웹 응용 프로그램에서 당신은 당신이 프로필을 게시의 PropertyGroup 이러한 요소를 추가 할 수 있습니다 @ ~ \ 등록 \ PublishProfiles을
ExecutionOrder

6
프로젝트 파일을 직접 편집하는 대신 UI를 통해 수행 할 수있는 방법이 있습니까?
Kurren

35

놀랍게도 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 규칙 을 이스케이프하는 것을 잊지 마십시오 .


11

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

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

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

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


7

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

1) 빌드 작업 : 없음

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

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

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


이것은 Azure에 게시하는 Visual Studio 2015에서 작동합니다.
Chris

2
문제는 특정 대상 환경 (빌드 구성)에 대해서만 제외 된 파일이 필요한 경우입니다. 이것은 고통 스럽다.
benmccallum

5

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

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

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


2

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 로 설정되어 있는지 확인하십시오.


니코는 GP 출신입니까? MCI에서 일했습니까?
Namphibian

1

찾고있는 기능은 프로젝트가 "웹 애플리케이션"으로 생성 된 경우 존재합니다. 웹 사이트 "프로젝트"는 웹 서버에 배포되는 것과 1 : 1로 간주되는 파일 모음입니다.

기능면에서 둘 다 동일하지만 웹 애플리케이션은 네이 키드 소스 코드 파일이 웹 서버에 복사되고 필요에 따라 컴파일되는 대신 모든 소스 코드를 DLL로 컴파일합니다.


1

이것은 여기에있는 다른 유용한 답변에 대한 부록 일 뿐이며 유용하다고 생각되는 것입니다.

제외 된 파일 및 폴더에 wpp.targets 사용

서로 다른 환경에 대해 여러 배포가있는 경우 제외 된 모든 파일 및 폴더를 설정할 수있는 하나의 공통 파일 만 있으면 도움이됩니다. *.wpp.targets아래 예제와 같이 프로젝트의 루트에 파일 을 생성하여이를 수행 할 수 있습니다 .

자세한 내용은 다음 Microsoft 가이드를 참조하십시오.

방법 : 게시 프로필 (.pubxml) 파일 및 Visual Studio 웹 프로젝트의 .wpp.targets 파일에서 배포 설정 편집

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
    <ExcludeFilesFromDeployment>
      *.config;
      *.targets;
      *.default;
    </ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>
      images;
      videos;
      uploads;
    </ExcludeFoldersFromDeployment>
  </PropertyGroup>
</Project>

0

Visual Studio 2017 (내 경우 15.9.3)에서는 .csproj-File 조작이 실제로 잘 작동합니다! pubxml을 수정할 필요가 없습니다.

그런 다음 PropertyGroup 조건을 사용하여 .csproj-File에서 매우 멋진 설정을 구성 할 수 있습니다. 예 :

  <PropertyGroup Condition="$(Configuration.StartsWith('Pub_'))">
    <ExcludeFoldersFromDeployment>Samples</ExcludeFoldersFromDeployment>
  </PropertyGroup>

구성이 "Pub_"로 시작하는 모든 배포에서 "Samples"폴더를 제외합니다 ...


"Condition"속성을 적용하지 않고 Visual Studio 2017에서 작동하는지 확인합니다.
Erdem KAYA

0

.net 코어 사이트가있는 Visual Studio 2017에서 현대적인 답변으로 :

CopyToPublishDirectory가 절대없는 csproj에서 게시에서 제외 할 수 있습니다.

  <ItemGroup>
    <Content Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="appsettings.Local.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

이에 대해서는 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2 에서 자세히 설명합니다.

<PropertyGroup>
    <ExcludeFilesFromDeployment>appsettings.Local.json</ExcludeFilesFromDeployment>
</PropertyGroup>

이전 제안은 저에게 효과가 없었습니다. 저는 Visual Studio가 이제 다른 게시 메커니즘을 사용하고 있기 때문에 "dotnet 게시"CLI 도구 또는 그 아래의 동등한 도구를 사용한다고 추측합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.