我们的应用程序中有大量的库。库用c ++或c#编写。(平台:.net框架,Windows,64位)将所有内容编译为源代码需要花费大量时间。我们曾考虑过切换到预构建的二进制文件,但我们仍然希望能够返回到源代码。作为我们使用git的版本控制系统,构建可以通过azure devops完成。可以根据需要设置任何自定义服务器。
存在哪些用于软件包管理的现成工具,以及可以在源代码和预构建二进制文件之间轻松切换的可能性?(如果工具与两种编程语言都不兼容-可以只为一种语言指定工具集是可以的。)如果不存在这样的工具,则您会自己推荐什么-使用哪种包装,要编写哪种脚本那一个的顶端?
是否可以识别Api / abi断裂?
这个问题有多个方面-源代码构建,程序包安装,外部存储库,api / abi中断,构建系统本身。
首先您的要求-您是否只对包装和/或安装感兴趣?
包装本身有可能下面的包装系统中使用,例如:nuget, conan, vcpkg, choco
。
您很有可能不仅会发布包本身,而且还会为它们调试符号感兴趣。
对于azure devops / debug符号,可以从以下链接中找到发布文档:
https://azure.microsoft.com/zh-CN/blog/deep-dive-into-azure-artifacts/ https://docs.microsoft.com/zh-cn/nuget/create-packages/symbol-packages- up
目前,柯南(C ++包装)不支持符号发布:https : //github.com/conan-io/conan/issues/4047
为了获得源代码分发,可以使用git本身。Git子模块确实允许创建外部git存储库引用,但是一旦添加了外部子模块,就需要使用double commit更改所有内容-一个git commit到子存储库,一个git commit更新主存储库中引用的git hash。
确实存在一些解决此问题的方法,例如:不带子模块的嵌套git:
=>
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
但是,如果您使用预构建的二进制文件而不是源代码来构建主存储库-在理想的解决方案中,您不需要该外部git存储库,这也意味着不需要git clone / checkout外部存储库。
然后,也可以有一个all-in-one solution
或多个解决方案,每个解决方案都是单独编译的。
确实更容易拥有all-in-one solution
,因为依赖解决方案编译的麻烦更少。
为了实现完全动态的解决方案生成,例如可以使用cmake-它可以根据cmake中使用的预配置选项生成解决方案。(请参阅cmake的"option"
)。
cmake确实是C ++(支持预编译头文件,加快了统一编译速度)的不错选择,但对于C#来说可能不是那么简单(很难找到必要的参数来正确配置它)。
目前(5.2020)尚未找到替代cmake的更好方法,但是与cmake并行发展的是多种工具和生态系统,因此需要观察未来可能会带来什么。
然后关于包装。choco似乎是nuget的子集-它使用自己的支持软件更新的xml标签扩展了nuspec。(推荐的网页:https : //chocolatey.org/,https : //docs.microsoft.com/en-us/nuget/reference/nuspec)
如果您要发布nuget包甚至安装程序包,则可以使用nuget存储库(无需任何额外费用)。
如果不足以满足您的需要,也可以将nuget服务器升级到choco服务器,但是可能要花一些钱-请参阅巧克力般的网页。
在实际发生编译/链接错误或应用程序在运行时崩溃之前,无法在任何级别上观察到Api / abi中断-唯一可行的替代方法-是控制包装本身的版本控制-因此主程序包nuget(或choco)版本需要更高版本的从属nuget(或choco)版本。
如果主存储库由子存储库由同一个人开发-那么api / abi中断可以由开发人员自己完成,但是如果两个gits彼此独立并且由不同的团队开发-那么api / abi中断可以在以下任何时刻发生时间。
确保存储库一致的最佳方法-在主存储库上进行单元测试,这将检查是否没有api / abi中断。
从理论上讲,如果api / abi中断-构建系统本身可以继续使用两种构建替代方案-
可以通过使用分支来应用相同的机制,例如
这种机制可能不仅需要观察两个存储库,而且还需要观察分支,以防持久故障。(例如,子git的开发团队并不关心主git中发生的构建中断)
怀疑没有任何现成的工具可用于此目的(如果会出现,请发表评论),因为这可能需要重新连接来自两个可能不同的构建链,来自不同的git存储库,来自不同的组织的工具。
最后,但并非最不重要的一点-如果您希望您的应用程序具有软件更新功能-则nuget / choco发行版下载可与其他nuget / choco服务器一起使用。
这是nuget包的下载部分的好示例:https : //github.com/mwrock/NugetDownloadFeed
安装软件包的构建是一个更为复杂的问题-例如,请参见以下链接:
(以我的意见为最佳)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句