zoukankan      html  css  js  c++  java
  • 信息系统开发平台OpenExpressApp -如何部署OEA应用

      BloodyAngel 把智能部署写的比较清楚了《信息系统开发平台OpenExpressApp - ClickOnce智能部署》,我在这里再进行一些补充。

      如果用过OpenExpressApp, 会知道客户端和服务器端都有一个统一的Library目录用来存放类库文件,客户端有个Module目录用来存放模块程序集文件,这样做的原因是可以很好 的部署框架。OEA可以发布ClickOnce客户端版本,第三方应用时只需要把特定项目应用的程序集拷贝到这两个目录即可。本篇主要描述一下部署相关内 容。

    ExpressAppModule从Library目录装载类库元模型

      ExpressAppModule是OEA的内置模块,它继承与BaseModule,在Initialize放过中从指定的Library目录中获取类库程序集

    Code
        public class ExpressAppModule : BaseModule
        {
            
    public ExpressAppModule(IUnityContainer container)
                : 
    base(container)
            {
            }

            
    /// <summary>
            
    /// 加入Library目录下的业务模型 命令等
            
    /// </summary>
            public override void ()
            {
                
    base.Initialize();

                
    //查找Library目录下的所有程序集
                Directory.CreateDirectory(@".\Library");
                
    foreach (string fileName in Directory.GetFiles("Library""*.dll"))
                {
                    
    foreach (var item in Assembly.LoadFrom(fileName).GetTypes()
                        .Where(t 
    => t.HasMarked<BusinessObjectAttribute>()))
                    {
                        
    //加入业务模型 命令等
                        BusinessObjectInfo bOInfo = ApplicationModel.AddBusinessObject(item);
                        bOInfo.AddNotVisibleCommand();
                    }
                }
            }
        }

    定位.Net程序集文件

    客户端从可访问的程序集中装载Command

    Code
       /// <summary>
        
    /// Adapt commands
        
    /// </summary>
        public class WPFBaseModule : BaseModule
        {
            
    public WPFBaseModule(IUnityContainer container)
                : 
    base(container)
            {
            }

            
    /// <summary>
            
    /// 把本程序集中,对于每一个标记了CommandAttribute的命令,
            
    /// 都构造CommandAdapter并加入到CommandRepository中。
            
    /// </summary>
            public override void Initialize()
            {
                
    if (this.GetType() != typeof(WPFBaseModule))
                {
                    
    base.Initialize();
                    var types 
    = this.GetType().Assembly.GetTypes().Where(t => t.HasMarked<CommandAttribute>());
                    
    foreach (var item in types)
                    {
                        var ca 
    = item.GetSingleAttribute<CommandAttribute>();

                        var coreCommand 
    = ApplicationModel.Commands[ca.Name];
                        var des 
    = new CommandDescription(ca.Label, string.Empty, string.Empty, ca.ToolTip, string.Empty);
                        var adapter 
    = new CommandAdapter(coreCommand, typeof(CommandRepository), des);

                        CommandRepository.Add(adapter);
                    }
                }
            }
        }

    服务器端从可访问的程序集中装载CSLA类库

    CLR定位程序集时,将扫描应用程序的几个子目录。下面是CLR扫描一个语言中性的程序集顺序:
       1. Appbase\AsmName.dll
       2. Appbase\AsmName\AsmName.dll
       3. Appbase\privatePath\AsmName.dll
       4. Appbase\privatePath\AsmName\AsmName.dll
       5. Appbase\privatePath\AsmName.dll
       6. Appbase\privatePath\AsmName\AsmName.dll
      ……
    对于privatePath需要在应用程序的配置文件中添加相应小节即可。配置文件必须位于应用程序的基目录中,名字必须是EXE文件名再加.config扩展名。OEA客户端和服务器的配置文件如下:

        <runtime>
            
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                
    <probing privatePath="Library;Module" />
            
    </assemblyBinding>
        
    </runtime>

    客户端智能部署(ClickOnce)

      这个部署方式同微软模式应用小组开发项目中patterns & practices: Composite WPF and Silverlight 中使用的方式是一样的,具体的可以参考BloodyAngel 写的《信息系统开发平台OpenExpressApp - ClickOnce智能部署

    服务器端部署

      在这里就不着重描述了,大家可以建立一个IIS的Web部署安装程序,把相关文件部署到目录即可 

     

    更多内容: 开源信息系统开发平台之OpenExpressApp框架.pdf

  • 相关阅读:
    C#中线程安全的单例模式
    分布式服务和库表设计模式详解
    通俗易懂的讲解下Java注解
    MEF框架使用总结
    Docker:四、Docker进阶 Windows Docker IIS 部署
    Docker:三、深入Docker容器&Asp.net发版
    Docker:二、开始部署第一个Asp.net应用
    Docker:一、开始部署第一个Asp.net应用
    Docker:常见命令
    .net 中的 StringBuilder 和 TextWriter 区别
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1608828.html
Copyright © 2011-2022 走看看