防止将引用的程序集PDB和XML文件复制到输出

Jas*_*rse 113 xml build visual-studio pdb-files

我有一个Visual Studio 2008 C#/ .NET 3.5项目,其中包含一个后期构建任务来压缩内容.但是我发现我还在输出目录(和ZIP)中获取引用的程序集'.pdb(debug)和.xml(文档)文件.

例如,如果MyProject.csproj引用YourAssembly.dll,并且在与DLL相同的目录中存在YourAssembly.xml和YourAssembly.pdb文件,它们将显示在我的输出目录(和ZIP)中.

我可以在ZIP'ing时排除*.pdb但我不能排除*.xml文件,因为我有相同扩展名的部署文件.

有没有办法阻止项目复制引用的程序集PDB和XML文件?

Jas*_*rse 147

我希望能够在主应用程序中添加和删除引用的程序集,同时避免需要维护我需要删除或排除的文件.

我通过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>
Run Code Online (Sandbox Code Playgroud)

  • 这可能是"正确的"方式,但它是如此隐藏,这在我的书中是不好的. (3认同)

mwj*_*son 62

您也可以通过命令行指定:

MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none
Run Code Online (Sandbox Code Playgroud)

  • 这看起来像是要走的路,因为您可以将它包含在构建定义MSBuild参数中,而不必破解csproj文件. (9认同)
  • 这在TFS中运行良好,节省了在我的情况下修改100个项目 (2认同)

And*_*nZA 17

您可以添加类似于的Post Build事件命令 del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"

  • 我个人认为这是正确的答案 - 另一种方式是你攻击项目文件和任何其他人(或你自己多年后)不知道在哪里看到这被阻止. (4认同)

Vas*_*891 6

前 2 个答案对我不起作用。我在此链接中找到了一个对我有用的解决方案。http://kitsula.com/Article/How-to-exclude-xml-doc-files-from-msbuild

以防万一,上面的链接不起作用:

  1. 在解决方案资源管理器中卸载项目

  2. 右键单击该项目,然后单击“编辑 *.csproj”

  3. 在每个环境的 PropertyGroup 部分中添加下一行。

  4. 重新加载并重建项目。

     <AllowedReferenceRelatedFileExtensions>
              *.pdb;
              *.xml
     </AllowedReferenceRelatedFileExtensions>
    
    Run Code Online (Sandbox Code Playgroud)


Din*_*ngo 5

这是一个相当古老的问题,但由于没有关于如何通过UI关闭生成PDB和XML文件的答案,我认为它应该在这里是为了完整性.

在Visual Studio 2013中:在项目属性中的"编译"选项卡下,取消选中"生成XML文档文件",然后单击下面的"高级编译选项"并将"生成调试信息"更改为"无",这样就可以了.

  • 这不会影响你包含的任何nuget包,它们仍然会有`pdb`和`xml`文件. (12认同)