2017-10-19 81 views
0

我使用来自https://github.com/kzu/GitInfo的GitInfo nuget包在我的Web应用程序中提供分支和提交信息。在ASP.NET网站.pubxml文件中使用'gitinfo'MSBuild变量?

我有一个发布配置文件设置为部署到文件系统,我想在路径中包含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" /> 

就是我想要做的可能吗?

回答

1

是我想做的事情吗?

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

<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 ?

+0

感谢您的回答。我添加了'UsingTask'和一个Target来设置一个环境变量。我可以看到变量已经从命令提示符正确设置。我在pubxml中使用了var:' C:\ Development \ Web \ Publish _ $(GITINFO_GITCOMMIT)'。但是,变量仍然不能从VS向导中识别,也不能通过MSBuild执行发布。 这个页面似乎证实了这一切应该工作和格式是正确的:https://programmaticponderings.com/tag/publish-profiles/ 我想我会忘记它几个小时,并有一个更晚的去! – Daz

+0

我对此有了进一步的了解,虽然它不能100%回答我在问题中所描述的用例,但我会将其标记为正确答案(现在!)Visual Studio发布向导将挑选环境如果在打开IDE时该变量已经存在,则在publishUrl中为变量,但如果在发布之前进行进一步的提交,则不会更新该变量。 – Daz