Visual Studio 프로젝트 속성의 다양한 "빌드 작업"설정은 무엇이며 어떻게합니까?


844

대부분의 경우 Visual Studio에서 기본값으로 설정 한 모든 것을 가져옵니다 ... 솔루션 탐색기에서 선택한 각 파일 의 BuildAction 속성을 참조하고 있습니다. 여러 가지 옵션이 있으며 각 옵션이 무엇을하는지 알기가 어렵습니다.

답변:


1015
  • None : 파일이 프로젝트 출력 그룹에 포함되지 않으며 빌드 프로세스에서 컴파일되지 않습니다. Readme 파일과 같은 설명서가 포함 된 텍스트 파일이 그 예입니다.

  • 컴파일 : 파일이 빌드 출력으로 컴파일됩니다. 이 설정은 코드 파일에 사용됩니다.

  • Content : Application.GetContentStream (URI)을 통해 파일을 어셈블리와 동일한 디렉토리에있는 스트림으로 검색 할 수 있습니다. 이 메서드가 작동하려면 파일을 "Content"로 표시 할 때 Visual Studio에서 추가하는 AssemblyAssociatedContentFile 사용자 지정 특성이 필요합니다.

  • 포함 된 리소스 : 파일을 단독 어셈블리 매니페스트 리소스에 포함시킵니다.

  • 리소스 (WPF 만 해당) : AppName.g.resources라는 공유 어셈블리 어셈블리의 모든 파일에서 유사한 설정을 가진 파일에 파일을 포함시킵니다.

  • 페이지 (WPF 만 해당) : xaml파일을로 컴파일하는 데 사용 됩니다 baml. 는 baml다음과 같은 기술이 내장되어 있습니다 Resource(즉, AppName.g.resources`로 사용 가능)

  • ApplicationDefinition (WPF 만 해당) : 응용 프로그램을 정의하는 XAML / 클래스 파일을 표시합니다. x : Class = "Namespace.ClassName"으로 코드 숨김을 지정하고 StartupUri = "Window1.xaml"로 시작 양식 / 페이지를 설정합니다.

  • SplashScreen (WPF 만 해당) : WPF 응용 프로그램이로드 된 다음 자동으로 사라질 때 표시되는 이미지SplashScreen

  • DesignData : XAML 뷰 모델을 컴파일하여 Visual Studio에서 샘플 데이터로 사용자 컨트롤을 미리 볼 수 있습니다 (모의 유형 사용)

  • DesignDataWithDesignTimeCreatableTypes : Visual Studio에서 샘플 데이터로 사용자 정의 컨트롤을 미리 볼 수 있도록 XAML 뷰 모델을 컴파일 합니다 (실제 형식 사용).

  • EntityDeploy : (Entity Framework) : Entity Framework 아티팩트를 배포하는 데 사용됩니다 .

  • CodeAnalysisDictionary : 철자 규칙에 대한 사용자 정의 단어 사전 을 포함하는 XML 파일


9
" Blendability "에 " DesignData "가 사용되므로 WPF 마크 업 기반 데이터를 추가 할 수 있습니다. 즉, 올바른 설정이 적용되어 디자인 타임에 표시됩니다.
PGallagher 2016 년

6
또한 원 클릭 배포를 사용할 때는 콘텐츠가 포함되지만 "최신 경우 복사"를 선택한 경우에도 없음이 표시되지 않습니다.
Dax Fohl

4
가짜, CodeAnalysisDictionary 및 XamlAppRef는 어떻습니까?
Crono

1
@jxramos이 정보는 프로젝트 파일에 저장됩니다.
Tobias

18
무엇에 대해 AdditionalFiles? VS 2015에서 볼 수 있지만 이에 대한 참조를 찾을 수 없습니다.
전체론 개발자

111

설명서에서 :

BuildAction 속성은 빌드가 실행될 때 파일로 Visual Studio가 수행하는 작업을 나타냅니다. BuildAction은 여러 값 중 하나를 가질 수 있습니다.

없음-파일이 프로젝트 출력 그룹에 포함되지 않으며 빌드 프로세스에서 컴파일되지 않습니다. Readme 파일과 같은 설명서가 포함 된 텍스트 파일이 그 예입니다.

컴파일-파일이 빌드 출력으로 컴파일됩니다. 이 설정은 코드 파일에 사용됩니다.

컨텐츠-파일이 컴파일되지 않았지만 컨텐츠 출력 그룹에 포함됩니다. 예를 들어이 설정은 .htm 또는 다른 종류의 웹 파일에 대한 기본값입니다.

Embedded Resource-이 파일은 기본 프로젝트 빌드 출력에 DLL 또는 실행 파일로 포함됩니다. 일반적으로 리소스 파일에 사용됩니다.


1
흥미 롭습니다! VS2008을 설치했는데 왜 설명서에 나타나지 않았는지 궁금합니다.
Paul Batum

PRI 리소스는 어떻습니까?
야와 르

1
@PaulBatum이 인용 된 정의에 대한 참조를 삽입 할 수 있습니까?
라잔 프라 사드

@ Raymond 232 : 인용 된 정의는 무엇입니까?
피터 Mortensen

1
@PaulBatum : 그렇습니다. 참으로 참고가 좋을 것입니다. 대답은 "문서에서"로 시작하므로이 문서에 대한 링크를 주시면 감사하겠습니다.
Marc

35

페이지-지정된 XAML 파일을 가져 와서 BAML로 컴파일하고 해당 출력을 어셈블리의 관리되는 리소스 스트림 (특히 AssemblyName.g.resources)에 임베드합니다. 또한 루트 XAML 요소의 적절한 속성이있는 경우 파일은 해당 페이지에 대한 "코드 숨김"의 일부 클래스를 포함하는 blah.g.cs 파일을 작성합니다. 이것은 기본적으로 BAML goop을 호출하여 파일을 메모리에 다시 수화시키고 클래스의 멤버 변수를 현재 생성 된 항목으로 설정합니다 (예 : 항목에 x : Name = "foo"를 넣는 경우) , 당신은 이것을 할 수 있습니다 .foo.Background = Purple; 또는 유사합니다.

ApplicationDefinition-페이지와 유사하지만 한 단계 씩 진행되며 응용 프로그램의 인스턴스 포인트를 정의하여 앱 객체를 인스턴스화하고 실행하여 StartupUri 속성에 의해 설정된 유형을 인스턴스화하고 기본 창을 제공합니다. .

또한 명확하게하기 위해이 질문은 전체적으로 결과 세트에 포함되어 있습니다. 누구나 MSBuild 작업을 빌드하여 추가 BuildAction을 정의 할 수 있습니다. % systemroot % \ Microsoft.net \ framework \ v {version} \ 디렉토리를보고 Microsoft.Common.targets 파일을 보면 VS Pro 이상에서 더 많은 암호를 해독 할 수 있어야합니다. 개인 클래스를 테스트하는 데 도움이되는 개인 접근자를 생성 할 수있는 "그림자"작업이 있습니다.


좀 더 완전한 참조 답변을 얻기 위해 Gishu의 답변에 답변의 일부를 복사해도 괜찮습니다.
Ian Boyd

32

VS2010에는 '빌드 조치'및 '출력 디렉토리로 복사'에 대한 특성이 있습니다. 따라서 copy 속성이 'New if Copyer Newer'또는 'Copy Always'로 설정된 경우 'None'조치는 여전히 빌드 디렉토리로 복사됩니다.

따라서 'Application.GetContentStream'을 통해 액세스 할 컨텐츠를 나타 내기 위해 'Content'의 빌드 조치를 예약해야합니다.

외부 적으로 연결된 일부 .config에 대해 '없음'의 '빌드 작업'설정과 '최신 경우 복사'의 '출력 디렉터리 복사'설정을 사용했습니다.

지.


고마워 그러나 나는 어떻게 / 어떻게하는지에 대해 약간 혼란 스럽다. 이상적으로 "업로드"폴더를 "포함"하고 싶습니다. 모든 하위 파일이 게시에 포함됩니다.
SamJolly

이는 개체 탐색기의 개별 항목 속성에 적용되며, 항목을 선택하거나 마우스 오른쪽 버튼을 클릭하고 속성을 선택할 때 속성 탭에 표시됩니다. 원하는 것을 위해 프로젝트를 마우스 오른쪽 버튼으로 클릭하면 기존 항목을 추가해야한다고 생각합니다. BTW, 기존 항목 추가 대화 상자의 저장 버튼에는 링크로 추가 할 수있는 드롭 다운이 있습니다. 여전히 폴더 내에 항목을 추가해야 할 수도 있습니다.
Gerard ONeill

5

VS2008에서 가장 유용한 것으로 보이는 문서 항목은 다음과 같습니다.

WPF (Windows Presentation Foundation) WPF 응용 프로그램 작성

ms-help : //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition 응용 프로그램 정의 (루트 요소가 Application 인 XAML 태그 파일)가 포함 된 XAML 태그 파일을 식별합니다. Install이 true이고 OutputType이 winexe 인 경우 ApplicationDefinition은 필수입니다. WPF 응용 프로그램 및 결과적으로 MSBuild 프로젝트는 하나의 ApplicationDefinition 만 가질 수 있습니다.

페이지 콘텐츠가 이진 형식으로 변환되어 어셈블리로 컴파일되는 XAML 태그 파일을 식별합니다. 페이지 항목은 일반적으로 코드 숨김 클래스와 함께 구현됩니다.

가장 일반적인 페이지 항목은 최상위 요소가 다음 중 하나 인 XAML 파일입니다.

Window (System.Windows..::.Window).

Page (System.Windows.Controls..::.Page).

PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)).

ResourceDictionary (System.Windows..::.ResourceDictionary).

FlowDocument (System.Windows.Documents..::.FlowDocument).

UserControl (System.Windows.Controls..::.UserControl).

리소스 응용 프로그램 어셈블리로 컴파일 된 리소스 파일을 식별합니다. 앞에서 언급했듯이 UICulture는 리소스 항목을 처리합니다.

내용 응용 프로그램과 함께 배포되는 내용 파일을 식별합니다. 콘텐츠 파일을 설명하는 메타 데이터는 AssemblyAssociatedContentFileAttribute를 사용하여 응용 프로그램으로 컴파일됩니다.


4

어떻게 약 이 페이지에 연결 Microsoft에서 유형합니다 (DesignData 및 DesignDataWithDesignTimeCreatableTypes 설명). 인용 :

다음은 샘플 데이터 파일에 대한 두 가지 빌드 조치를 설명합니다.

샘플 데이터 .xaml 파일에는 다음 빌드 작업 중 하나가 할당되어야합니다.

DesignData : 샘플 데이터 형식이 가짜 형식으로 만들어집니다. 샘플 데이터 유형을 작성할 수 없거나 샘플 데이터 값을 정의하려는 읽기 전용 특성이있는 경우이 빌드 조치를 사용하십시오.

DesignDataWithDesignTimeCreatableTypes : 샘플 데이터 유형은 샘플 데이터 파일에 정의 된 유형을 사용하여 작성됩니다. 기본 빈 생성자를 사용하여 샘플 데이터 유형을 작성할 수있는 경우이 빌드 조치를 사용하십시오.

아니 그렇게 믿을 수 없을만큼 철저한하지만 적어도 힌트를 제공합니다. 이 MSDN 연습 은 몇 가지 아이디어를 제공합니다. 이러한 빌드 작업이 Silverlight 이외의 프로젝트에도 적용되는지 여부는 알 수 없습니다.


4
  • 가짜 : Microsoft 가짜 (단위 테스트 격리) 프레임 워크의 일부입니다. 모든 Visual Studio 버전에서 사용할 수있는 것은 아닙니다. 가짜는 프로젝트에서 단위 테스트를 지원하는 데 사용되며 응용 프로그램의 다른 부분을 스텁 또는 심으로 대체하여 테스트중인 코드를 격리하는 데 도움이됩니다. 자세한 내용은 https://msdn.microsoft.com/en-us/library/hh549175.aspx를 참조 하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.