릴리스 모드 빌드에서 XML 문서 파일의 복사를 방지하는 방법은 무엇입니까?


82

일부 타사 구성 요소를 참조하는 Visual Studio 2010 프로젝트가 있습니다. 그들의 어셈블리는 우리 (그리고 우리 만) 개발자에게 유용한 XML 문서 파일과 함께 제공됩니다. 그리고 프로젝트가 빌드 될 때마다 (디버그 또는 릴리스 모드에서) 이러한 XML 파일이 빌드 디렉토리에 복사됩니다.

Visual Studio 내에서 또는 MSBuild를 통해 빌드 디렉터리에 대한 해당 XML 파일의 복사본을 비활성화하는 설정이나 스위치를 찾을 수없는 것 같습니다. 빌드 후 스크립트는 옵션 일 수 있지만 냄새 나는 스크립트입니다. 어떤 아이디어? 감사합니다.


1
명확하게하기 위해 참조 추가 대화 상자에서 어셈블리에 대한 참조를 추가했습니다. 이제 문서를 작성할 때 XML 파일이 출력 경로에 표시됩니까?
Sayed Ibrahim Hashimi

답변:


112

프로젝트를 빌드 할 때 .xml / .pdb 파일은 ResolveAssemblyReference 작업을 통해 수집됩니다. ResolveAssemblyReference가 호출되면 관련 파일의 파일 확장명 목록이 전달됩니다. 해당 파일 확장명 목록은 MSBuild 속성 AllowedReferenceRelatedFileExtensions 에서 캡처됩니다 . 기본적으로 해당 목록에는 ".pdb; .xml"이 포함됩니다.

모든 관련 참조 파일이 선택되지 않도록 제외하려면 속성 값을 관련 파일에 확장자가없는 것으로 재정의하면됩니다. 예를 들어 AllowedReferenceRelatedFileExtensions 를 "-"로 설정할 수 있습니다 .

반환되는 파일 목록을 사용자 지정할 수도 있습니다. .pdb 파일 만 찾으려면 .pdb 파일을 전달해야합니다 AllowedReferenceRelatedFileExtensions=".pdb". 이 경우 .dll / .exe 옆에 .pdb 파일이있는 모든 참조도 복사됩니다. 또한 .pdb / .xml로 끝나지 않을 수있는 다른 관련 파일을 복사하는 데 사용할 수도 있습니다. 예를 들어 MyAssembly.dll이라는 참조 어셈블리가 있고 동일한 폴더에 MyAssembly.pdb 및 MyAssembly.foo가있는 경우 설정 AllowedReferenceRelatedFileExtensions=".pdb;.foo"하면 .pdb 및 .foo 파일이 모두 출력 디렉터리로 복사됩니다.


이것이 답입니다. 대단히 감사합니다!
Humberto

15
이것에 대한 답을 얻는 데 2 ​​년이 걸렸다는 것은 재밌습니다.
Sayed Ibrahim Hashimi

난 그냥 깨달았 2 년 전이에 I 주석, :( 다시 대답하지 죄송합니다
사예드 이브라힘 하시을

7
msbuild 명령 줄 또는 프로젝트 파일에서이를 지정 하는 방법대한 세부 사항 : stackoverflow.com/questions/2011434/…
yzorg

3
Visual Studio에서 어디에서 AllowedReferenceRelatedFileExtensions?
Apostrofix

0

Visual Studio 프로젝트 파일은 msbuild 파일과 형식이 동일합니다. 따라서 구성 이름이 'Release'인 경우 xml 파일을 복사하지 않도록 해당 섹션에 수동으로 조건을 추가 할 수 있습니다.

변해야합니다

<ItemGroup>

...에

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

또는 이와 비슷한 것.


3
Visual Studio 프로젝트 및 솔루션 파일은 MSBuild 파일입니다.
AMissico

@AMissico 틀 렸습니다. 솔루션 파일은 MSBuild 파일이 아닙니다.
julealgon 2014

프로젝트 파일 형식 (XML)은 아니지만 여전히 지원되는 MSBuild 파일입니다. 환경 변수 설정 ( set MSBuildEmitSolution=1또는 속성 인수 전달 ( p:msbuildemitsolution=1)
AMissico

-4

.xml / .pdb가 빌드 작업 "Content"(etc)로 표시되어 있으면 "None"으로 변경할 수 있습니다. 또한 copy-to-build-output이 false 인지 확인해야합니다 .

둘 다 설정 되었습니까?


2
하지만 이렇게하려면 프로젝트 항목으로 추가해야합니다 ... 아니면 내가 잘못 했습니까?
Humberto

컴파일러에서 생성 된 .PDB 및 .XML 파일은 재귀 빌드 오류 및 파일 잠금으로 끝날 수 있으므로 프로젝트에 포함되어서는 안됩니다.
Jamie Howarth 2011 년

1
@codegecko "없음"을 보았습니까? 그들은 intellisense 등을 얻기 위해 소스 dll에 인접해야합니다. 나는 이것에 문제 가 없었 습니다.
Marc Gravell

2
@codegecko 누가 빈에 대해 말했습니까? 나는 거기에서 참조하지 않을 것입니다 ... 나는 일반적으로 dll, XML 및 pdb와 함께 / lib에서 참조합니다.
Marc Gravell

1
Aaaaah, 이제 페니가 떨어졌습니다. 오해했습니다. / lib 폴더에 포함하고, VS 내부를 참조하고, 솔루션 폴더에 항목을 추가하고, 출력 유형을 "None"으로 지정합니다. 실제로 내 프로젝트에서 사용할 수 있습니다. 감사합니다!
Jamie Howarth 2011 년

-5

릴리스 빌드에서 XML 파일을 폴더에 복사하는 데 어떤 문제가 있습니까? 이것이 괜찮은 것 같고 실제 문제는 파일을 선택하여 설치 프로그램에 배치하는 코드에 있습니다. 자신의 bin \ release 폴더에서 타사 dll을 선택하는 것은 제 생각에는 좋은 습관이 아닙니다. 내 설치 프로그램이 내 소스 트리의 자체 폴더에서 타사 dll을 선택하도록했습니다.


2
문제는 이러한 파일이 IntelliSense 기능을 지원하는 것 외에 기능이 없다는 것입니다. 릴리스 파일에 포함 할 필요가 없습니다. 게다가, 관련된 설치 프로그램이 없습니다 ...
Humberto

그렇다면 앱을 어떻게 배포하고 있습니까?
Russell McClure

3
따라서 내 해결책은 복사하지 않으려는 파일을 복사하지 않도록 복사 스크립트를 수정하는 것입니다.
Russell McClure

2
확실히 작동합니다. 그러나 파일이 빌드에서 복사되는 것을 방지 하는 이상적인 솔루션 은 아닙니다 . 이 행동의 논리를 이해하려고 노력하고 있습니다. 감사!
Humberto

4
잘 작성된 XML 문서 파일은 큽니다. 각 빌드에서 복사하면 SSD의 수명이 단축됩니다.
springy76

-5

설정은 해당 프로젝트의 속성에있는 "빌드"탭에서 "XML 문서 파일"을 선택 취소합니다. 또한 . * proj 파일의 빌드 구성에 <DocumentationFile>적용 가능한 아래에서 호출되는 MSBuild 속성 <PropertyGroup>입니다.


3
이 응답은 정확하지 않습니다. 그는 제어 공급 업체에서 제공하는 미리 생성 된 XML 파일에 대해 질문하고 있습니다. 귀하의 응답은 자신의 XML 파일을 생성하는 경우에만 유용합니다.
Kevin Kalitowski 2012 년

<PropertyGroup> 요소의 .csproj 파일에서 설정할 수있는 것 같습니다. <AllowedReferenceRelatedFileExtensions> ". pdb". = ""</ AllowedReferenceRelatedFileExtensions>
Jay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.