【问题标题】:Use 'gitinfo' MSBuild variable within ASP.NET website .pubxml file?在 ASP.NET 网站 .pubxml 文件中使用“gitinfo”MSBuild 变量?
【发布时间】:2018-03-31 11:06:59
【问题描述】:

我正在使用来自 https://github.com/kzu/GitInfo 的 GitInfo nuget 包在我的 Web 应用程序中提供分支和提交信息。

我有一个发布配置文件设置为部署到文件系统,我想在路径中包含 git 分支名称。我尝试在 pubxml 文件中更改这一行:

   <publishUrl>C:\Development\Web\Publish_$(GitBranch)</publishUrl>

...但是“$(GitBranch)”被忽略(网站已成功发布到“Publish_”文件夹)。我正在使用 Visual Studio 2015 中的“发布...”向导进行发布。

我的网站 vbproj 文件具有以下导入和目标:

  <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
  <PropertyGroup>
    <PreBuildEvent />
    <PostBuildEvent />
  </PropertyGroup>
  <Import Project="packages\GitInfo.2.0.3\build\GitInfo.targets" Condition="Exists('packages\GitInfo.2.0.3\build\GitInfo.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('packages\GitInfo.2.0.3\build\GitInfo.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\GitInfo.2.0.3\build\GitInfo.targets'))" />
  </Target>
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v‌​$(MSBuildToolsVersio‌​n)\WebApplications\M‌​icrosoft.WebApplicat‌​ion.targets" Condition="false" />

我想做的事可能吗?

【问题讨论】:

    标签: asp.net visual-studio msbuild


    【解决方案1】:

    我想做的事可能吗?

    安装 NuGet 包后打开你的网站 vbproj 文件,你会注意到下面的代码行:

    <Import Project="packages\GitInfo.2.0.3\build\GitInfo.targets" Condition="Exists('packages\GitInfo.2.0.3\build\GitInfo.targets')" />
    

    NuGet 将 .targets 文件导入到项目文件中,其中包含 GitInfo 的项目、属性、目标和任务。这些导入的变量只能在构建过程中访问。当您在发布期间访问它时,您将获得一个空值。这就是为什么 $(GitBranch) 值被忽略并将网站发布到 Publish_ 文件夹的原因。

    作为一种解决方法,您可以自定义一个目标,将值$(GitBranch) 设置为环境变量,以便您可以随时访问它。

    有关更多详细信息,请参阅How to set envrionment variables in MSBuild file ?

    【讨论】:

    • 感谢您的回答。我添加了“UsingTask”和一个目标来设置环境变量。我可以从命令提示符看到变量已正确设置。我在 pubxml 中使用了 var:&lt;publishUrl&gt;C:\Development\Web\Publish_$(GITINFO_GITCOMMIT)&lt;/publishUrl&gt;。但是,VS 向导或使用 MSBuild 执行发布仍然无法识别该变量。这个页面似乎证实了这一切都应该有效并且格式正确:programmaticponderings.com/tag/publish-profiles我想我会忘记它几个小时,然后再去一次!
    • 我对此更进一步,虽然它没有 100% 回答问题中描述的我的用例,但我将其标记为正确答案(现在!)Visual Studio如果在打开 IDE 时该变量已经存在,则发布向导将在 publishUrl 中获取环境变量,但如果我在发布前进一步提交,则不会更新。
    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2011-09-15
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多