解析大型.NET ERP系统 版本控制

数据库版本控制

1) 开发版本控制。控制多人同时修改数据库产生的冲突,使用SQL Source Control 工具做版本管理。

SQL Server Management Studio支持VSS和TFS等作为数据库脚本的版本控制工具。

关于SQL Source Control,参考以下地址 http://www.red-gate.com/products/sql-development/sql-source-control/

2) 部署版本控制。将所有涉及数据库表结构变动的地方保存为SQL语句,依次用文件编号顺序编写。

比如,系统参数表增加一个文件传输方式的字段,参考下面的脚本:

--文件传输模式 XCOPY,FTP,HTTP
IF NOT EXISTS(SELECT C.NAME FROM DBO.SYSCOLUMNS C, DBO.SYSOBJECTS O WHERE O.ID = C.ID AND O.NAME = 'CompanyParameter' AND  C.NAME = 'FileTransmissionMode')
BEGIN
    Alter Table CompanyParameter ADD FileTransmissionMode nvarchar(1) NULL
END
GO

将这些积累起来的数据变更脚本DML保存到一个带版本编号的SQL文件中,比如REV1710.sql。1710表示版本号,它的文件内容应该是这样的:

EXEC  CheckVersion  'REV1710'
Go

--文件传输模式 XCOPY,FTP,HTTP
IF NOT EXISTS(SELECT C.NAME FROM DBO.SYSCOLUMNS C, DBO.SYSOBJECTS O WHERE O.ID = C.ID AND O.NAME = 'CompanyParameter' AND  C.NAME = 'FileTransmissionMode')
BEGIN
    Alter Table CompanyParameter ADD FileTransmissionMode nvarchar(1) NULL
END
GO

EXEC  UpdateVersion  'REV1710'
Go

这个文件的设计模式包含三部分内容:

1) 检查版本,检测当前数据库的版本是否是REV1709,不允许跳过版本升级。

2) 执行更新语句,更新数据库。

3) 修改当前数据库的版本为REV1710。

数据库中的版本表定义如下,包含版本名称和升级日期:

CREATE TABLE [dbo].[Version](
[Recnum] [DECIMAL](18, 0) IDENTITY(1,1) NOT NULL,
[Version] [NVARCHAR](8) NOT NULL,
[ApplyDate] [DATETIME](50) NULL
 CONSTRAINT [PK_AgentConfiguration] PRIMARY KEY CLUSTERED 
(
    [Version] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
 
程序版本控制

定义一个版本常量类型,用于所有程序集共享此版本变量。

public sealed class AssemblyVersion
{
       public const string Major = "2";
       public const string Minor = "4";
       public const string Build = "0";
       public const string Revision = "0";

       public const string Version = Major + "." + Minor + "." + Build + "." + Revision;
}

修改所有项目的版本信息文件AssemblyInfo.cs,设置版本信息为定义的常量值。

[assembly: System.Reflection.AssemblyFileVersion(AssemblyVersion.FileVersion)]
[assembly: System.Reflection.AssemblyVersion(AssemblyVersion.Version)]

1 在程序启动时,检查程序当前目录中的程序集版本,发现不一致的程序集则应该抛出异常,停止启动程序。

private static void VerifyAssembliesVersion()
{
        string[] files = Directory.GetFiles(Application.StartupPath, "Enterprise.*.dll", SearchOption.TopDirectoryOnly);
        Parallel.ForEach<string>(files, file =>
        {
                FileVersionInfo fileVersion = FileVersionInfo.GetVersionInfo(file);
              
                 if (string.CompareOrdinal(fileVersion.FileVersion, AssemblyVersion.FileVersion) != 0)
                 {
                       throw new AppException(string.Format("File version mismatch detected\r\nFile: {0}\r\nRequired Version: {1}\r\nCurrent Version: {2}",
                           new object[] { file.Replace(Application.StartupPath + "\\", ""), AssemblyVersion.FileVersion, fileVersion.FileVersion }));
                 }               
         });
}
 

2  登入时,检测客户端程序的版本是否与服务器端的版本一致。C/S架构的程序,Client登入操作要判断Server端版本是否一致,不一致需要抛出异常,终止登入。

3  功能的窗体基类检查版本,在这里也可以做与版本相关的签名判断。

private void VerifyAssembly()
{
     //System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
      startIndex = fullName.LastIndexOf("Version");
      version = fullName.Substring(startIndex, 15);
      versionNumber = str.LastIndexOf("Version");
      str = str.Substring(num2, 15);
      startIndex = fullName.LastIndexOf("PublicKeyToken");
      publickToken = fullName.Substring(startIndex, 31);
      num2 = str.LastIndexOf("PublicKeyToken");
      publickToken = str.Substring(num2, 31); 
}

取出程序集的全名(Assembly.GetCallingAssembly().FullName),逐个字符串判断版本是否一致。

 

4 对于特殊类型的程序集,比如工作流,.NET CLR程序集,版本保持为永久一致。这两种类型的程序集需要序列化并存储到数据库中,当程序集在更新版本时,这类数据不会被修改。如果版本有变化,会导致找不到程序集错误。

<WorkflowEntity WorkflowName="WFI001" Assembly="BusinessLogic, Version=5.5.0.0, Culture=neutral, PublicKeyToken=ea0fbbdb0910eab3" Type="BusinessLogic.EntityClasses.WorkflowEntity"><Fields><WorkflowName><CurrentValue Type="System.String">WFI001</CurrentValue><DbValue Type="System.String">WFI001</DbValue><IsChanged>False</IsChanged><IsNull>False</IsNull></WorkflowName><Description><CurrentValue Type="System.String">本日安全库存量</CurrentValue><DbValue Type="System.String">本日安全库存量</DbValue><IsChanged>False</IsChanged><IsNull>False</IsNull></Description><TableName><CurrentValue Type="System.String"></CurrentValue><DbValue Type="System.String"></DbValue><IsChanged>False</IsChanged><IsNull>False</IsNull></TableName><WorkflowType>

在这个工作流定义中(XOML),版本是5.5.0.0,当升级到新的工作流版本后加载此工作流定义文件(XOML)会报错。
BusinessLogic, Version=5.5.0.0, Culture=neutral, PublicKeyToken=ea0fbbdb0910eab3

.NET CLR开发的SQL Server程序集也应按遵循此方法,使用固定的版本号。

5  不同的.NET编译版本,需要附带相应的程序集缓存或安装工具。

InstallUtil.exe  用于安装.NET程序集到系统服务中。

GACUTIL.EXE 用于将.NET程序安装到系统全局缓存中。

可以通过配置文件在运行时将旧版本的文件重定向到新版本,参考下面的配置节。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
             <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1B03E6ACF1164F73" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-0.86.0.518" newVersion="0.86.0.518"/>
            </dependentAssembly>
    </assemblyBinding>
 </runtime>
 
 

转载于:https://www.cnblogs.com/JamesLi2015/p/4753766.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能描述: 1.业务流程更加合理、系统化 将业务流程按照部门管理职能进行划分,突破了单部门信息化处理的模式,着眼于将整个企业集 团范围内的业务流程控制更加系统化、合理化,企业运作效率因而得到最大限度的提高。 2.部门管理更具严密性、有序性 以组织机构为基础,进行工作和权限的分配,企业内部各个部门的管理职能更加清晰完整,各部 门之间通过严格的审核制度,形成紧密而连续的业务流,使企业的资金流、物流、信息流得到有 效的管理和监控,极大程度降低企业经营管理等方面的风险指数。 3.业务管理模式更加灵活、多样化 企业的业务流程各具特色,因而系统提供了可配置的业务流程模式和表单定制模式,使企业可以 根据实际情况配置业务管理流程,既可以满足企业的实际管理要求,又能够对业务流程进行监控 与跟踪。 4.统计分析功能更加丰富、实用化 系统将经营分析、财务分析、图形分析有机结合,为管理人员的决策提供了详尽的、全面的、准 确的数据资料,因而对企业经营情况一目了然,为企业的管理决策提供了充分依据。 5.预警功能更加智能化 系统可以结合采购计划、客户订单和当前库存、商品最高库存、最低库存等数据,给出真实的库 存预警报表,即时给予预警提示,确保企业生产经营正常进行。 6.零售功能强大 多种销售折扣(返点,根据不同的客户定制不同的产品销售价格),询价分析与退货方式等,还 可以对顾客不满意或有问题商品进行退货处理。 7.数据处理安全、方便 系统加强了管理业务过程中敏感数据的保密管理,保障了企业运作的商业安全。系统的自动维护 和备份功能进一步保证了数据的安全性。严谨的权限和业务流程控制可以确保数据不被伪造和篡 改,使企业领导可以充分授权。 8.办公管理趋于协同化、自动化 系统集成了企业收发文管理,加强了企业内部的沟通联系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值