【问题标题】:Deploying and running .NET assemblies on a worker computer在工作计算机上部署和运行 .NET 程序集
【发布时间】:2010-10-31 00:57:32
【问题描述】:

我有一个基本的任务框架,其中的任务如下:

  • 做一些内容处理
  • 报告生成
  • 错误日志观察器
  • 邮件

被封装在一个ITask接口中,该接口有一个Run方法,以及其他与状态相关的成员。

这些任务要么按计划连续运行,要么按需运行。它们可以作为 Windows 服务托管,也可以作为工作机器上的控制台应用程序托管。

宿主应用程序运行一组具有TaskRunner 类的任务,这些任务可能使用调度、线程等。

我希望能够以比执行发布和更新更自动化的方式将任务部署到工作机器。

基本上,我希望能够发送一个 ITask 接口(或另一个子组件)的进程和实现,以按某个计划或使用某些设置运行。

我知道我可以动态加载程序集,我也见过:MEF

解决此问题的最佳方法是什么?我应该构建一个实现并将 DLL 发布到工作进程可以读取它们的已知目录吗?我应该将 DLL 作为二进制文件发布到数据库中以供工作人员读取吗?

【问题讨论】:

    标签: .net deployment automation assemblies auto-update


    【解决方案1】:

    任何一种方式都可以。在我看来,您更喜欢哪一种取决于您的操作要求。

    如果您已经安装了一个良好的数据库,并且您希望任务得到严格管理和可查询,并且如果您希望将许多其他属性与任务相关联,那么数据库及其强制执行严格模式和查询/更新能力的能力将成为问题。

    如果你有一个更宽松的环境,你没有安装数据库服务器,你只是希望能够推出任务,共享文件系统或只是一个文件删除会更有意义。

    如果您对两者都没有强烈的偏好,并且如果您希望模型具有灵活性,请在任一端封装发布和加载内容,以便您可以轻松配置文件系统或数据库,或一些其他提供商。

    在任何一种情况下,动态加载程序集并调用它都会很容易。

    【讨论】:

    • 你知道什么好的方法,或者关于将程序集部署到数据库的文章吗?我很好奇现有的最佳实践(如果有的话),关于构建程序集、为其生成二进制文件、将其保存到数据库然后随后从数据库加载它的过程。也许是一个 MSBuild 任务?
    【解决方案2】:

    我的建议是查看 Codeplex 上的 WPF CAB 项目。在项目中,它具有将新 dll 注册为实现接口 IModule 的模块的概念。

    您可以遵循相同的模式,只使用 ITask,然后调用 ITask.RunTask() 或等效方法。

    【讨论】:

    • 听起来好像 eulerfx 已经把那部分放下了。他问的是物理部署。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多