在我们的解决方案(asp.NETMVC)中,我们添加了一个附加项目,该项目始终作为第一个项目构建。此项目引用nuget包“gitsharp”,它是一个托管的.net git客户端库。附加项目的输出是一个命令行工具,我们称之为versionnumbergenerator.exe。 在这个附加项目的后期生成事件中,我们执行versionnumbergenerator.exe。这将生成一个文件assemblyinfoshared.cs,其中还包含一个类的源代码,该类将git commit id作为常量。我们使用“gitsharp”以编程方式获取提交id。下面是一个片段: // Use relative path to .gitignore for the following statement using (var repo = new Repository(".\\..\\..\\..")) { shortHead = repo.Head.CurrentCommit.ShortHash; // shortHead now contains the git commit id } 然后,所有其他项目通过链接引用assemblyinfoshared.cs文件以避免重复。因此,其他每个项目都可以在需要时显示git commit id,包括一个文件\u layout.cshtml,它可以在页脚中显示commit id。 此解决方案与kudu的自定义部署脚本结合使用,可用于azure网站。它也可以在使用kudu的其他场景中工作。首先构建附加项目是很重要的,这样它也可以执行构建后的步骤。仅在本地构建解决方案就足够了。 我们已经在许多项目中使用了这种方法。一个例子可以在https://app.storkk.com 附加说明: 截至发稿时,gitsharp已经有一段时间没有得到维护了。不过,目前看来效果还不错。 您可能需要考虑从版本控制中排除assemblyinfoshared.cs,因为它将在每个生成过程中重新生成。 您可能需要在解决方案中手动设置依赖项,以确保以正确的顺序生成项目。
3条答案
按热度按时间ckocjqey1#
使用自定义部署脚本的方法可能是可行的。请看这里的一些相关讨论。在部署期间,kudu创建一个
%home%\site\deployments\active
包含提交id的文件,因此您可以在运行时读取它。rmbxnbpk2#
在我们的解决方案(asp.NETMVC)中,我们添加了一个附加项目,该项目始终作为第一个项目构建。此项目引用nuget包“gitsharp”,它是一个托管的.net git客户端库。附加项目的输出是一个命令行工具,我们称之为versionnumbergenerator.exe。
在这个附加项目的后期生成事件中,我们执行versionnumbergenerator.exe。这将生成一个文件assemblyinfoshared.cs,其中还包含一个类的源代码,该类将git commit id作为常量。我们使用“gitsharp”以编程方式获取提交id。下面是一个片段:
// Use relative path to .gitignore for the following statement using (var repo = new Repository(".\\..\\..\\..")) { shortHead = repo.Head.CurrentCommit.ShortHash; // shortHead now contains the git commit id }
然后,所有其他项目通过链接引用assemblyinfoshared.cs文件以避免重复。因此,其他每个项目都可以在需要时显示git commit id,包括一个文件\u layout.cshtml,它可以在页脚中显示commit id。此解决方案与kudu的自定义部署脚本结合使用,可用于azure网站。它也可以在使用kudu的其他场景中工作。首先构建附加项目是很重要的,这样它也可以执行构建后的步骤。仅在本地构建解决方案就足够了。
我们已经在许多项目中使用了这种方法。一个例子可以在https://app.storkk.com
附加说明:
截至发稿时,gitsharp已经有一段时间没有得到维护了。不过,目前看来效果还不错。
您可能需要考虑从版本控制中排除assemblyinfoshared.cs,因为它将在每个生成过程中重新生成。
您可能需要在解决方案中手动设置依赖项,以确保以正确的顺序生成项目。
hk8txs483#
找到了一个方法:你可以按照下面的说明进入kuduhttps://github.com/projectkudu/kudu/wiki/deployment-hooks
将git散列放入我添加的文件中
到cmd文件的post deploy区域。如果我想对cs文件做些什么,我可以在编译之前做,很明显azurecli生成的部署脚本正在尝试做什么。