2

我正在尝试部署一个新版本的 BizTalk 应用程序,其中包含多个应用程序的通用编排(大约 20 个左右)。新版本包含将由多个新应用程序使用的新编排。

当我尝试为新版本导入 msi 时,我收到一条错误消息:

“无法更新程序集“[assembly_name]”,因为它由不在要更新的程序集集中的程序集使用。要更新程序集,请删除以下程序集:“[dependant_assembly1] [dependant_assembly2] ...”

无法从开发环境访问 BizTalk 服务器,因此必须使用 BizTalk 管理控制台更新应用程序。如何在不删除并重新安装所有 20 个左右的依赖应用程序的情况下导入更新的应用程序?

谢谢

4

2 回答 2

4

听起来您正在部署一个与现有旧版本具有相同版本号的新基础应用程序。

什么对我们有用:

  • 每次部署应用程序的新版本时,增加版本号(因为程序集是 GAC 的,BTS 支持并行版本控制)。任何更改的自定义程序集也应进行版本控制。
  • 将新应用程序部署到本地 BizTalk 后,编辑资源以确保所有引用的程序集和绑定等的正确(最新)版本是最新的(删除旧的,添加新的)。
    • 您的通用应用程序现在将包含旧版本和新版本的程序集。您的“客户端”应用程序的较新版本将使用您的基础/框架/通用应用程序的较新版本。
    • 升级所有相关应用程序后,您可以删除旧版本。

但真正的解决方案似乎是更多地考虑将您的应用程序解耦,例如通过在应用程序之间使用消息传递——这样,您可以只拆分模式作为对应用程序的公共引用。

于 2010-09-10T08:48:08.087 回答
1

如果您想省略版本控制,您实际上可以更深入地破解 BT 上的部署过程,具体取决于您对实际 BT 框的访问。(说服你的系统管理员)

如果您只能访问部署控制台,请停止您的依赖应用程序,删除它们对您要升级的应用程序的引用,然后在顶部部署,重新添加您的引用并重新启动依赖应用程序。您实际上不必重新安装。这种方法既乏味又糟糕,但它会起作用。我们这样做是因为我们的 BT 安装量太多,无法进一步将它们与同一个应用程序的多个版本混为一谈

这是黑客。您需要访问服务器(我知道您说过您没有)或安装可以接收 dll 并为您执行以下功能的服务的能力。(我想你可能会说服某人让你设置它)免责声明,这不是一个受支持的解决方案,我声称不负责任等等等等

我们一直这样做,因为我们有太多的应用程序来做第一个解决方案。您可以将新编译的 DLL 放入 GAC。这不是 MSFT 等推荐的,但我们在生产环境中使用它的服务器大约有。GAC 中的 4000 个 dll 和 1200 个 BT 应用程序。您需要确保您的元数据是相同的,即您具有相同的版本、密钥令牌等,并且您需要有某种方式在版本控制系统之外跟踪您的 dll(我们构建了一个自定义部署基础架构来执行此操作)。最后,一旦您将 dll 推送到 GAC 中,您将需要重新启动 biztalk 服务。确保您没有任何暂停的实例引用您要重新部署的应用程序,因为它们会阻止 biztalk 在重新启动时从 GAC 提取新引用。

最后,重要的是要注意,如果您的更改需要更改 MessageBox 订阅(例如接收形状过滤器、相关性等的更改),则此方法将不起作用。如果您使用此方法,您还将放弃编排调试器中的某些功能改变orchs结构的方法。该图形将显示上次正确安装时的编排结构,但您的事件列表对于最新版本将是正确的。最后,如果您要替换模式 dll,您需要确保重新启动服务,因为 BT 会无限期地缓存模式。

于 2011-05-27T15:34:16.873 回答