为控制台应用程序生成 BuildInfo.config

Generate BuildInfo.config for Console App

当我使用 TFS Build (TFS 2013.4) 构建网站时,我在拖放文件夹中得到一个包含每个网站的 BuildInfo.config 文件。

但是我似乎无法为控制台应用程序生成相同的文件。我添加了

之类的东西
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\BuildInfo\Microsoft.VisualStudio.ReleaseManagement.BuildInfo.targets" />

  <!-- Build info -->
  <PropertyGroup>
    <!-- Generate the BuildInfo.config file -->
    <GenerateBuildInfoConfigFile>True</GenerateBuildInfoConfigFile>
    <!-- Include server name in build info -->
    <IncludeServerNameInBuildInfo>True</IncludeServerNameInBuildInfo>
    <!-- Include the symbols path so Visual Studio can find the matching deployed code when you start debugging. -->
    <!--<BuildSymbolStorePath>
      <path to="" symbols="">
    </BuildSymbolStorePath>-->
  </PropertyGroup>

但是文件没有出现。谁能告诉我生成 BuildInfo.config 需要什么?

通常,我们设置构建过程来为 Web 项目创建构建清单(BuildInfo.config 文件),并将此清单包含在发布中。此清单包含有关用于创建特定构建的项目、源代码管理和构建系统的信息。在我们打开 Web 应用程序诊断日志查看记录的事件后,此信息有助于 Visual Studio 找到匹配的源和符号。

Microsoft.VisualStudio.ReleaseManagement.BuildInfo.targets 是在应用程序中启用 Application Insights 部署标记。检查:http://blogs.msdn.com/b/visualstudioalm/archive/2013/11/14/implementing-deployment-markers-in-application-insights.aspx

BuildInfo.config 仅为 WebApplication 项目生成,但通过对 .proj 文件进行小的调整,您可以为任何需要它的项目包含 BuildInfo.config。我们为所有控制台应用程序生成它,因为它包含有关构建和提交的宝贵信息。

在 PropertyGroup 中添加:

<GenerateBuildInfoConfigFile>true</GenerateBuildInfoConfigFile>

我一般只加到我用来release下的配置里。这导致文件仅在我们发布产品时生成,而不是用于调试版本。它位于我们的 .proj 文件中的这个 PropertyGroup 中:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseBuild|AnyCPU'">

如果这些属性不包含任何值,您还需要一个 PropertyGroup 来指定 VSToolsPath 和 WebProjectOutputDir。

<PropertyGroup>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<WebProjectOutputDir Condition="'$(WebProjectOutputDir)' == ''">$(OutputPath)</WebProjectOutputDir></PropertyGroup>

添加这个,应该会生成 BuildInfo.config。

如果还是没有生成,还要添加下面的import。也许只是先检查导入是否尚未完成。如果你导入它两次,你会在构建过程中得到一个警告。

<Import Condition="'$(Configuration)' == 'ReleaseBuild'" Project="$(VSToolsPath)\BuildInfo\Microsoft.VisualStudio.ReleaseManagement.BuildInfo.Targets" />

构建会将文件名默认为 [$AssemblyName].BuildInfo.config。如果您希望它是 BuildInfo.config(以允许 AppInsights 获取它...),请在您的项目中或在您构建时覆盖 属性 BuildInfoFileName:

<BuildInfoFileName>BuildInfo.config</BuildInfoFileName>

/p:BuildInfoFileName=BuildInfo.config

另请注意我仅在构建特定配置时导入它的条件,因为 ReleaseManagement 目标在开发人员机器上不存在...

这应该让您踏上前进的道路...