我有C++项目(VS2005),其中包含#define指令中版本号的头文件.现在我需要在双C#项目中包含完全相同的数字.最好的方法是什么?
我正在考虑将此文件作为资源包含在内,然后在运行时使用正则表达式解析它以恢复版本号,但也许有更好的方法,您怎么看?
我不能在.h文件之外移动版本,也建立系统取决于它,C#项目是应该适应的.
我们正在开发与业务相关的大型应用程序.您可以找到类似于某些ERP,CRM等的这些应用程序.
现在我们要求我们需要对用户输入的所有数据进行版本控制.
例如:在某个时间点,用户需要查看特定采购订单的更改历史记录是什么?
我正在寻找一个非常通用的版本控制处理程序(非严格),如果某些业务数据属性发生变化,它甚至可以处理.这个单一的版本控制处理程序应该能够处理几乎任何类型的业务对象/数据.
什么是最好的编程/数据库设计来处理这些.
任何想法或意见?
PS:我已经添加了一些编程标签,因为我希望程序员能够接受这个主题并提出他们的想法.
编辑:我正在寻找一种非常优化的方式,有点类似于存储差异存在而不是以序列化/转储方式存储对象.
我希望能够为Java客户端/服务器运行集成测试(使用嵌入式jetty).此外,我希望能够在集成测试期间混合和匹配不同的服务器和客户端源代码版本.
我想知道什么是最好的git或maven版本策略来完成这个:
对客户端和服务器使用相同的git存储库,很难签出各种服务器版本的代码并根据各种客户端版本的代码进行测试.
使用单独的git存储库(第一个存储库与客户端src和集成测试,第二个存储库与服务器src) - 它还需要检出两个存储库以运行集成测试,并假设它们之间的相对路径.
仅针对maven版本服务器WAR测试客户端src代码可能导致开发人员针对与签出的服务器源代码不匹配的服务器WAR运行测试的诚实错误.
我们有一个带有WiX安装程序和MSBuild构建脚本的C#解决方案.我们正在从SVN迁移到Git.
作为我们版本号的第四部分,我们希望每个构建都能提升.到目前为止,我们已经使用了SVN版本号.MSBuild脚本定义了一个ProductVersion属性,其中包含SVN修订版号作为构建版本的四个数字的最后一个.但是,我们不能再使用它,因为我们将不再使用SVN.
我一直试图找到SVN版本号的替代品,但我无法弄清楚要使用什么.
Jenkins提供了我可以使用的内部版本号,但我不想将我们的版本控制系统与Jenkins联系起来.
Jenkins还提供了时间戳,但它不符合Microsoft的版本号限制:它是字母数字且有点长,而版本中的第4个数字应该是0到65535之间的整数.
我们可以将AssemblyVersion设置为1.0.*并让.NET填写其余部分.这适用于我们的程序集,但我找不到将其注入WiX的方法.我们可以在构建之后从其中一个程序<MSBuild>集中获取它,但我们的MSBuild脚本使用该任务立即构建整个解决方案,因此我们陷入了需要运行的Catch-22,<MSBuild>因此它可以编译一个程序集我们可以用来获取生成的版本号,但是为了运行<MSBuild>,我们首先需要一个已编译的程序集,以便我们可以从中获取生成的版本号.
我可以在MSBuild文件中添加一个单独的Target来编译某些东西(任何东西)并从中获取版本号,然后对该<MSBuild>任务进行实际调用.但那只是感觉不对.
同样,我并不关心数字是什么,只要它随着每次构建而增加.基于时间戳的东西会很好.有任何想法吗?
我正在研究一些php库.我想跟踪类库接口的变化.
我试图用phpDocumentor比较两个版本.
phpdoc项目:parse -d文件夹
生成具有项目接口结构的xml文件.我可以将此xml文件与另一个文件进行比较.但这些包含的信息比我想要的多.像行号,文件哈希等.
所以,我想比较两个提交,分支甚至分支,并找出它们的接口的差异.
比较示例:http://pastebin.com/1H61dJBT
了解何时更改主要版本也很重要.
进行不兼容的API更改时的MAJOR版本...
gemspec语义版本控制运算符〜(又名twiddle-wakka,又名悲观运算符)允许对gem版本进行约束,但允许进行一些升级.
我经常看到它可以被解读为:
"~> 3.1" => "Any version 3.x, but at least 3.1"
"~> 3.1.1" => "Any version 3.1.x, but at least 3.1.1"
Run Code Online (Sandbox Code Playgroud)
但是有一个数字,这个规则就会崩溃:
"~> 3" => "Any version x, but at least 3" *NOT TRUE!*
"~> 3" => "Any version 3.x" *True. But why?*
Run Code Online (Sandbox Code Playgroud)
如果我想要"任何版本3.x",我可以使用"〜> 3.0",这是一致的.就目前而言,这种操作在一个数字上的变化是不一致的,没有记录.
此外,如果我想说"任何高于或等于3的版本"(所以3.x,4.x等......)我很想使用"> ="运算符,我们被告知这是邪恶的.
这种行为有原因吗?
编辑:
我将这个给大卫找到rubygems中的罪魁祸首文件.有一个"功能"无声地将"3"扩展为"3.0"(版本中的第148行.rb:"单个数字版本会自动扩展为零以产生合理的结果.")
我必须说我不同意结果是明智的,因为它打破了预期的顺序,并阻止能够用该运算符说"任何版本x,但至少3".因此,我们被迫进入> = guides.rubygems.org 警告我们不要使用.无论如何.也许这篇文章将作为我一直在寻找的文档......
我在GitHub上编辑我的一个开源项目,我想替换链接(指向一个演示)README.md.
每次我对README文件或文档进行一些小的更改(没有任何实际的代码更改)时,是否必须更新库版本?
如果这很重要,我正在使用Bower来分发我的软件包和SemVer作为版本控制系统.
所以我花了几个小时来浏览Web API版本控制的所有真正奇妙的建议.我最喜欢的一些,对于那些和我一样有趣的人,没有特别的顺序:
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
http://www.pluralsight.com/courses/web-api-design
http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api
因此,所有这些建议都非常有助于设计API本质上的"前端".我们可以对API调用进行版本控制......现在,我正在努力解决这个问题.
对于拥有多个产品(这是一个新产品)的公司来说,这是一个大量数据驱动的应用程序.一些需要长期支持API调用的大客户,一些希望获得最新版本的小客户.我们可以使用类似于里程碑/长期支持版本的API来管理.大.
但在实践中,这将变得非常混乱,非常快.我们一直在努力将我们自己的网站,beta内部/外部API,存储库层以及甚至是要启动的SDK分层.我们将每个版本分成不同的分支,但它是SAAS - 我们托管数据库.因此,我们不仅能够对API调用进行版本控制 - 而且还包括其下的所有内容.业务逻辑,存储库和数据库.我们甚至没有开始进行单元/集成测试.
因此,尝试并且可能失败只在这里提出一个问题.
是否有一个合适的模式来构建一个分层的,数据驱动的.NET应用程序来应对多个版本?
具体来说,数据库将如何更改以及如何构建通用堆栈以对其进行全部版本化.我的一些想法包括:
我们有相当数量的开发人员,无论我写了多少ace文档,实际上它只会在某些东西不起作用时被读取.因此,理想情况下,开发人员必须尽可能明显地明白这一点.
例如,有一个Doxygen选项用于指定API何时使用\since标记出现
///
/// Does foo
///
/// \since 1.5
///
void foo();
Run Code Online (Sandbox Code Playgroud)
它会出现在foo()文档中.
我正在寻找一种自动创建页面的方法,该页面包含1.5中出现的所有API - 即列出所有标记的API \since 1.5或可能的其他标记(如果可用).
编辑:我尝试使用\ingroup并创建一个包含所有新API的组页面,它可以工作.但它将描述移到此页面,例如将一个新方法从类定义移动到页面"1.2.3中的新建",这不是我想要的.
在Kevin Goldsmith 2015年关于Spotify微服务(15:25-17:43)的讨论中,他提到当他们创建一个新版本的API时,他们只需创建一个新服务器,并保持旧服务器运行旧版本只要还有客户呼叫它(在这种情况下,嵌入了Spotify的智能灯).
我很困惑他们将如何能够维护和提供旧版本的潜在年份,当时在这段时间内肯定会有数据库架构更改?
我可以看到一些可能的解决方案,但它们似乎都不合理:
解决方案1听起来会引起太多的代码味道,遗留代码无处不在(在我看来,凯文似乎暗示他们当然不这样做).
对于其他服务或报告,解决方案2听起来像是一场噩梦.如果您想要的实体信息在您要求的实体的另一个版本的数据库中,该怎么办?
解决方案3听起来更像是一场噩梦,因为您必须编写代码来将您的版本请求迁移到您上面和下面的版本.这意味着您不能在创建新版本时保留现有(当前正在生产的版本)版本,因为您需要添加迁移以向前和向后移动请求,以便所有版本都接收到正确的请求参数.
希望我在这里错过了一些简单的东西,并且有一个神奇的解决方案可以让这个问题变得更容易,但我真的看不出它们是如何实现这一目标的?
谢谢!