MsBuild在Release配置中不生成PDB文件

时间:2013-03-22 03:37:47

标签: msbuild

<MSBuild Projects="$(ProjectFile)"  Targets="_WPPCopyWebApplication;"
Properties="OutDir=..\publish;Configuration=Release;Platform=AnyCPU" />

我使用上面的脚本发布Asp.Net项目。在项目设置中,我绝对确保在发布模式下生成调试符号。仍然MsBuild没有在输出中生成pdb文件。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>Full</DebugType>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DocumentationFile>WebProject.xml</DocumentationFile>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>

3 个答案:

答案 0 :(得分:17)

在查看Microsoft.Web.Publishing.targets源代码后,我发现在发布模式下将变量(ExcludeGeneratedDebugSymbol)设置为True。从评论中看,他们想要从WebSite项目中排除符号,但是没有为WebApplication项目正确设置条件。

所以,我决定从调用者参数覆盖我的构建脚本,它就像一个魅力。我还没有确定它可能导致的任何副作用或使用未记录的财产以用于未来的稳定性,但它现在有效。

来自Microsoft.Web.Publishing.target文件

<!--For website we will always exclude debug symbols from publishing unless it is set explicitly by user in website publish profile-->
    <ExcludeGeneratedDebugSymbol Condition="'$(ExcludeGeneratedDebugSymbol)'=='' And '$(_WebProjectType)' == 'WebSite'">True</ExcludeGeneratedDebugSymbol>

    <ExcludeGeneratedDebugSymbol Condition="'$(ExcludeGeneratedDebugSymbol)'=='' And '$(Configuration)' == 'Release'">True</ExcludeGeneratedDebugSymbol>
    <ExcludeGeneratedDebugSymbol Condition="'$(ExcludeGeneratedDebugSymbol)'==''">False</ExcludeGeneratedDebugSymbol>

我更新了我的脚本,如下所示。

<MSBuild Projects="$(ProjectFile)"  Targets="_WPPCopyWebApplication;"
Properties="OutDir=..\publish;Configuration=Release;Platform=AnyCPU"; ExcludeGeneratedDebugSymbol=false />

答案 1 :(得分:3)

您还可以更新发布配置文件(.pubxml)文件以包含该属性值。今天我必须使用TFS Build 2015中的新构建位来执行此操作,以使Web发布包含.pdb文件。请参阅文件的示例内容,其中属性已添加到底部。

<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish />
    <publishUrl>C:\Publish</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
    <ExcludeGeneratedDebugSymbol>false</ExcludeGeneratedDebugSymbol>
  </PropertyGroup>
</Project>

答案 2 :(得分:0)

您可以将其直接放在*.csproj文件中,作为最后一个属性组部分(在Import元素之前):

<PropertyGroup>
  <ExcludeGeneratedDebugSymbol Condition="$(DebugSymbols) == true">false</ExcludeGeneratedDebugSymbol>
</PropertyGroup>