2017-10-19 118 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