[xml] 참조 된 어셈블리 PDB 및 XML 파일이 출력에 복사되지 않도록 방지
콘텐츠를 압축하는 빌드 후 작업이 포함 된 Visual Studio 2008 C # /. NET 3.5 프로젝트가 있습니다. 그러나 내 출력 디렉터리 (및 ZIP)에 참조 된 어셈블리의 .pdb (디버그) 및 .xml (문서) 파일도 가져오고 있습니다.
예를 들어 MyProject.csproj가 YourAssembly.dll을 참조하고 YourAssembly.xml 및 YourAssembly.pdb 파일이 DLL과 동일한 디렉터리에있는 경우 내 출력 디렉터리 (및 ZIP)에 표시됩니다.
압축 할 때 * .pdb를 제외 할 수 있지만 확장명이 같은 배포 파일이 있으므로 * .xml 파일을 일괄 제외 할 수 없습니다.
프로젝트가 참조 된 어셈블리 PDB 및 XML 파일을 복사하지 못하도록하는 방법이 있습니까?
답변
명령 줄을 통해 지정할 수도 있습니다.
MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none
답변
삭제하거나 제외해야하는 파일을 유지 관리 할 필요없이 주 응용 프로그램에서 참조 된 어셈블리를 추가 및 제거 할 수 있기를 원했습니다.
나는 효과가 Microsoft.Common.targets
있는 무언가를 찾아서 그 AllowedReferenceRelatedFileExtensions
재산을 찾았다 . 기본값은 .pdb; .xml
이므로 프로젝트 파일에 명시 적으로 정의했습니다. 문제는 무언가 가 필요하다는 것입니다 (공백은 충분하지 않음). 그렇지 않으면 여전히 기본값을 사용합니다.
<Project ...>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<AllowedReferenceRelatedFileExtensions>
<!-- Prevent default XML and PDB files copied to output in RELEASE.
Only *.allowedextension files will be included, which doesn't exist in my case.
-->
.allowedextension
</AllowedReferenceRelatedFileExtensions>
</PropertyGroup>
답변
다음과 유사한 Post Build 이벤트 명령을 추가 할 수 있습니다. del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"
답변
이것은 다소 오래된 질문이지만 UI를 통해 PDB 및 XML 파일 생성을 해제하는 방법에 대한 답변이 없기 때문에 완전성을 위해 여기에 있어야한다고 생각했습니다.
Visual Studio 2013 : 프로젝트 속성의 컴파일 탭에서 “XML 문서 파일 생성”을 선택 취소 한 다음 그 아래에있는 “고급 컴파일 옵션”을 클릭하고 “디버그 정보 생성”을 “없음”으로 변경하면됩니다.
답변
내 대답은 이제 사소 할 수 있지만 해당 dll이 있으면 xml 파일을 삭제하는 데 사용하는 BAT 스크립트를 공유하고 싶습니다. 출력 폴더를 정리하고 제거하지 않으려는 다른 xml 파일이있는 경우 유용합니다.
SETLOCAL EnableDelayedExpansion
SET targetDir=%1
ECHO Deleting unnecessary XML files for dlls
FOR %%F IN (%targetDir%*.xml) DO (
SET xmlPath=%%~fF
SET dllPath=!xmlPath:.xml=.dll!
IF EXIST "!dllPath!" (
ECHO Deleting "!xmlPath!"
DEL "!xmlPath!"
)
)
용법:
Cleanup.bat c:\my-output-folder\
여기저기서 모든 유형의 검색과 함께이 간단한 작업 ( “지연된 확장”항목 덕분에)을 완료하는 데 한 시간이 걸렸습니다. 나와 같은 다른 BAT 초보자에게 도움이되기를 바랍니다.
답변
나는 다른 답변에 많은 행운을하지 않았다, 나는 마침내 내장에 사용하여 내 구현에서이 작업을 수행하는 방법을 알아 냈다 “삭제”명령을 분명히 당신이해야 할 특정의 방법이 와일드 카드를 구현은 , 그것의 약간 미묘한 차이 , 여기에 “CSPROJ”( TargetDir 은 자동으로 포함 된 내장 변수)에 넣어야하는 모든 것을 “Project”태그 아래에 있습니다.
<Target Name="RemoveFilesAfterBuild">
<ItemGroup>
<XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
<PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
</ItemGroup>
<Delete Files="@(XMLFilesToDelete)" />
<Delete Files="@(PDBFilesToDelete)" />
</Target>
또한 다양한 언어 별 폴더가 생성되는 데 문제가있었습니다.이 문제도있는 경우 사용하지 않는 언어 별 폴더도 제거 할 수 있습니다. 빌드 유형 “Release”에서만 트리거하도록 선택했습니다.
<ItemGroup>
<FluentValidationExcludedCultures Include="be;cs;cs-CZ;da;de;es;fa;fi;fr;ja;it;ko;mk;nl;pl;pt;ru;sv;tr;uk;zh-CN;zh-CHS;zh-CHT">
<InProject>false</InProject>
</FluentValidationExcludedCultures>
</ItemGroup>
<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />
<ItemGroup>
<XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
<PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
</ItemGroup>
<Delete Files="@(XMLFilesToDelete)" />
<Delete Files="@(PDBFilesToDelete)" />
</Target>
답변
XML 파일 (예 : 디버그 릴리스) 만 제외하려면 다음과 같이 할 수 있습니다.
<AllowedReferenceRelatedFileExtensions>
<!-- Prevent default XML from debug release -->
*.xml
</AllowedReferenceRelatedFileExtensions>
기본적으로 나열된 각 확장자 (세미콜론으로 구분)는 제외됩니다.