【问题标题】:Visual Studio publish generates .pdb file despite using DebugType=None尽管使用 DebugType=None,Visual Studio 发布仍会生成 .pdb 文件
【发布时间】:2020-11-16 10:54:50
【问题描述】:

我正在使用以下发布配置文件从 Visual Studio 中发布控制台应用程序:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishProtocol>FileSystem</PublishProtocol>
    <Configuration>Release</Configuration>
    <Platform>x64</Platform>
    <TargetFramework>netcoreapp5.0</TargetFramework>
    <PublishDir>bin\Release\netcoreapp5.0\publish\</PublishDir>
    <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
    <SelfContained>False</SelfContained>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishReadyToRun>True</PublishReadyToRun>
    <IncludeNativeLibrariesForSelfExtract>True</IncludeNativeLibrariesForSelfExtract>

    <DebugType>none</DebugType>
    <DebugSymbols>false</DebugSymbols>
  </PropertyGroup>
</Project>

我的目标是不在发布输出文件夹中发出任何 .pdb 文件(调试符号)。
这并不完全按预期工作。

控制台应用程序项目的 .pdb 文件未生成 - 正如预期的那样,但它引用的业务逻辑项目的调试符号由于某种原因生成。这是一个错误吗?

我可以通过在业务逻辑库的项目文件中添加条件语句来解决这个问题,但我想避免这种情况,因为我认为发布应用程序的所有相关信息都应该驻留在发布配置文件中。

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
   <DebugType>none</DebugType>
   <DebugSymbols>false</DebugSymbols>
</PropertyGroup>

【问题讨论】:

    标签: visual-studio msbuild publish-profiles


    【解决方案1】:

    &lt;DebugType&gt;none&lt;/DebugType&gt;&lt;DebugSymbols&gt;false&lt;/DebugSymbols&gt; 只会阻止生成当前项目的 pdb 文件。如果你的主项目引用了第二个项目,这些节点不会阻止第二个项目的 pdb 文件在主项目中。 这是由that设计的。

    并且如果你想防止被引用项目的pdb文件生成到主项目的发布文件夹中,你应该额外使用这个节点:

    <AllowedReferenceRelatedFileExtensions>*.pdb</AllowedReferenceRelatedFileExtensions>
    

    解决方案

    将这些添加到您的 pubxml 文件中:

    <DebugType>none</DebugType>
    <DebugSymbols>false</DebugSymbols>
    <AllowedReferenceRelatedFileExtensions>*.pdb</AllowedReferenceRelatedFileExtensions>
    

    【讨论】:

    • 这很有趣。我似乎找不到有关此设置的任何文档。从它的名字来看,它的逻辑不应该倒过来吗?
    • 节点有点特殊。 *.pdb-.pdb 表示在主项目中排除此类后缀文件,而.pdb 表示包含此类文件。有点灵活!并且没有如此明显的官方文件来解释这一点。你可以用我的方法进行测试,并给我们任何反馈。
    • 所以在你这边,你想排除引用项目的pdb文件,你应该使用*.pdb
    • 很好的答案,真的帮助了我。它也适用于 Visual Studio 2019+winform+.net5。
    • 我最终这样做了,但还添加了 &lt;ExcludeFilesFromDeployment&gt;bin\**\*.pdb&lt;/ExcludeFilesFromDeployment&gt; 的核选项,因为这适用于所有引用的项目,除了正在发布的项目。
    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多