我有一个Visual Studio 2008 C#/ .NET 3.5项目,其中包含一个post build任务来压缩内容。但是我发现我还在输出目录(和ZIP)中获取引用的程序集'.pdb(debug)和.xml(文档)文件。
例如,如果MyProject.csproj引用YourAssembly.dll,并且在与DLL相同的目录中存在YourAssembly.xml和YourAssembly.pdb文件,它们将显示在我的输出目录(和ZIP)中。
我可以在ZIP'时排除* .pdb,但我不能排除* .xml文件,因为我有相同扩展名的部署文件。
有没有办法阻止项目复制引用的程序集PDB和XML文件?
答案 0 :(得分:144)
我希望能够在主应用程序中添加和删除引用的程序集,同时避免维护我需要删除或排除的文件。
我挖掘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>
答案 1 :(得分:61)
您也可以通过命令行指定:
MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none
答案 2 :(得分:17)
您可以添加类似于del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"
答案 3 :(得分:5)
这是一个相当古老的问题,但由于没有关于如何通过UI关闭生成PDB和XML文件的答案,我认为它应该在这里是为了完整性。
在Visual Studio 2013中:在项目属性中的“编译”选项卡下,取消选中“生成XML文档文件”,然后单击下面的“高级编译选项”并将“生成调试信息”更改为“无”,这样做诀窍。
答案 4 :(得分:0)
我的答案现在可能很简单,但是如果有相应的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\
我花了一个小时才能完成此简单的工作(感谢“延迟扩展”的东西),并且在这里和那里进行所有类型的搜索。希望它能帮助像我这样的英美烟草新手。
答案 5 :(得分:0)
我对其他答案不太满意,我终于想出了如何使用内置的"Delete" command在实现中执行此操作,显然,您需要使用{{3} },即implement wildcards,这是您需要放入“项目”标签下的“ CSPROJ”(bit nuanced是内置变量,自动包含在内)的所有内容:
<Target Name="RemoveFilesAfterBuild">
<ItemGroup>
<XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
<PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
</ItemGroup>
<Delete Files="@(XMLFilesToDelete)" />
<Delete Files="@(PDBFilesToDelete)" />
</Target>
我在生成各种特定于语言的文件夹时也遇到了麻烦,如果您也遇到该问题,也可以删除未使用的特定于语言的文件夹。我选择仅在构建类型“发布”下触发它:
<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>
答案 6 :(得分:0)
前2个答案对我不起作用。我在此链接中找到了对我有用的解决方案。 http://kitsula.com/Article/How-to-exclude-xml-doc-files-from-msbuild。
以防万一,以上链接不起作用:
在解决方案资源管理器中卸载项目
右键单击该项目,然后单击“编辑* .csproj”
在每个环境的PropertyGroup部分中添加下一行。
重新加载并重建项目。
<AllowedReferenceRelatedFileExtensions>
*.pdb;
*.xml
</AllowedReferenceRelatedFileExtensions>
答案 7 :(得分:-2)
如果您不需要它们,为什么要生成.pdb
和.xml
个文件?您可以在项目的属性→构建(→高级... )中禁用调试符号和文档文件生成。 (可能仅适用于Release
版本。)
答案 8 :(得分:-3)
如果您只想排除XML文件(例如调试版),您可以执行以下操作:
<AllowedReferenceRelatedFileExtensions>
<!-- Prevent default XML from debug release -->
*.xml
</AllowedReferenceRelatedFileExtensions>
基本上,列出的每个扩展名(以分号分隔)将被排除。