【问题标题】:Is there are more efficient way of publishing/debugging Dynamics CRM 365 Plugins?是否有更有效的方法来发布/调试 Dynamics CRM 365 插件?
【发布时间】:2020-08-07 21:12:18
【问题描述】:

我的任务是让我们的 2008 CRM 服务器进入 Microsoft Dynamics 365 内部部署的现代时代。我有一个插件工作和 java 脚本,这是我的第一个任务,调试/远程调试也在工作。我还可以对 DLL 进行更改,并且更改工作。但是,我真的很关心将 DLL 发布到服务器的过程需要多长时间,并且想知道是否遗漏了什么。看了很多视频,用谷歌搜索了很多,但似乎每个人都知道如何让它工作,仅此而已。

我注意到在注册期间有一个选项可以选择“磁盘”作为 DLL 的位置,但是当我选择它时它会崩溃?所以我不得不选择“数据库”

初始设置:

  • 构建添加注释“A”的插件
  • 将 DLL 从 bin\Debug 复制到服务器 bin\assembly 文件夹。
  • 将插件注册为沙盒/数据库
  • 测试,它可以工作。

目前我的开发工作流程是:

  • 稍微修改插件代码以显示“B”而不是“A”
  • 重建 DLL。
  • 将 DLL 从 bin\Debug 复制到服务器 bin\assembly 文件夹。
  • 测试,它仍然显示'A'

我能够让这个工作的唯一方法,似乎必须有一个更简单的方法:

  • 重建 DLL 的
  • 将 DLL 从 bin\Debug 复制到服务器 bin\assembly 文件夹。
  • 打开注册
  • 再次定位 DLL
  • 勾选插件选择框
  • 点击更新所选插件
  • 测试并显示“B”

如果您需要快速更改我怀疑我需要的重建测试,这似乎是一个真正的 PIA。

有没有更简单的方法?

【问题讨论】:

    标签: .net plugins dynamics-crm


    【解决方案1】:

    这是我多年前使用的开发工作流程,涉及手动部署和测试插件。现在,我使用TDD (Test Driven Development) 开发和测试插件的更现代、更高效的方式。

    传统的手动工作流程涉及:

    • 1) 对插件进行更改
    • 2) 通过 Plug Registration 或其他 VS 扩展部署插件
    • 3) 在目标环境中手动测试插件/附加远程调试器/分析器
    • 4) 重复

    这是一个非常耗时的工作流程。

    有了更自动化的开发工作流程,它变成了:

    • 1) 对插件进行更改
    • 2) 本地调试/测试
    • 3) 重复
    • 4) 推送您的更改,让 CI 触发器构建和发布您的插件

    或者如果严格遵循 TDD:

    • 1) 根据要求添加/更新任何必要的单元测试,这将导致您的插件失败,因为该插件还没有验证这些要求的实现逻辑
    • 2) 更新您的插件代码,以便单元测试通过
    • 3) 自信地重构代码(确保单元测试仍然通过)
    • 4) 推送您的更改
    • 5) 让 CI 构建和发布自动化触发器

    主要区别在于,使用 TDD 方法,您的开发和测试反馈循环要快得多,而且您(通常)只需要最后一个部署步骤,这也可以实现自动化。

    您还可以利用现有的开源框架,这些框架允许为您模拟 Microsoft SDK 中的大多数接口,例如 FakeXrmEasy(我是该框架的作者)。

    希望对你有帮助

    【讨论】:

    • @Jodi 感谢您的洞察力。我知道 TDD 开发和 FakeXtmEasy 听起来很有趣。我目前的主要问题是我根本无法构建一个包含卫星 dll 的工作插件。为什么这么难我不知道!我正在考虑调查其他途径,例如 WCF,因为部署插件的人似乎存在缺陷和问题。
    • 如果您拥有 .dll(它们在您的组织内部),更好的选择是向它们推送源代码 NuGet 包,并从我心中的主插件中使用它们。否则 ILmerge 它们不再“支持”。另一种选择是按照您的建议添加 Web 服务,但随后我们将引入另一个可能存在问题的网络元素...
    【解决方案2】:

    虽然我上面使用的方法是可行的,但它非常痛苦并且容易出错。我发现重新启动 IIS 服务器也可以,但导航并重新启动它确实不是一个可行的选择。

    我发现以前有一个 Aron 提到的开发人员工具,称为“Microsoft Dynamics 365 Developer Toolkit”,您可以从 MS here 下载它

    对于 Visual Studio 2017,您需要编辑 vsix:

    • 使用 7Zip 解压或重命名为 zip 并解压到一个文件夹中。
    • 您会在文件夹中找到 extension.vsixmanifest
    • 编辑文件并替换行

    InstallationTarget Version="[11.0,14.0]"

    与:

    InstallationTarget Version="[11.0,15.0]"

    • 这告诉清单允许在 2017 年安装
    • 重新压缩文件夹的内容(不是文件夹)
    • 将压缩文件重命名为 .vsix
    • 安装 vsix
    • 忽略警告并完成安装。

    您现在应该在 VS2017 的新项目部分中有一个新的 Dynamics CRM 部分。

    您需要进入“工具 > 选项 > Dynamics 365 Development Toolkit > 工具路径”并设置您的 CRMSDK bin 和 Tools/PluginRegistrationTool 文件夹的路径。

    创建一个新项目:

    • 新项目
    • 选择“Dynamics 365 的新 Visual Studio 解决方案模板”

    例如添加一个新的 Account 实体:

    • VS2017 > CRM 浏览器
    • 右键账户>创建插件

    现在,除非我在您右键单击“包”并选择“部署”时忘记了某些内容,否则它将部署到您的 CRM 服务器;)

    问候, 戴夫C

    tip 1:我们365服务器指向的CRM SDK实际上指向了微软的2015 SDK。代表我引起了一些恐慌,因为该工具包需要 8.0 以上;)

    【讨论】:

    • 这可行,但是... 使用插件,不支持附属 DLL。而且我找不到一种轻松将卫星 DLL 合并到其中的方法,例如。例如,您的 Accounts.dll。 Microsoft 不再支持 CRM Dynamics 的 ILMerge(据我所知)。对我来说,VS2017 中的一个共享项目在编译时不起作用,只是抛出了一个错误“路径中的非法字符”。我可以在任何项目插件/共享/包中看到的任何路径中都没有任何非法字符。我还在调查中!真的真的不应该这么费时间!
    • 感谢您的更新。糟糕的是共享项目有问题。有可能开始工作。 “真的真的不应该是这么费时间的小姐!” - 我当然有时也有同样的感觉。
    • 在过去几天的调查中,我从未找到将 DLL 包装到 CRM 服务器或在 CRM 服务器上干净地访问它们的解决方案。我怀疑这是因为插件旨在用于前端表单等的简单操作,而不是真正用于实现后端流程。我怀疑云正在作为解决方案被推送,所以我使用 WCF 服务来完成后端工作。此外,您不能仅从 Java 插件中弹出确认消息表单/对话框。边走边学!
    • 嗨,Dave,一般来说,插件是为后端平台添加自定义逻辑的。 JavaScript 用于向前端 Web 客户端添加自定义逻辑。 MSFT 肯定会推广云,所以你使用 WCF 服务很酷。你可能还想研究一个 Azure 感知插件,它将插件上下文发送到 Azure 端点进行处理。当然,Power Automate 现在也很强大。
    【解决方案3】:

    插件发布和调试肯定是一个挑战。

    就发布而言,我使用商业 3rd Party Visual Studio 扩展 XrmToolkit(无从属关系),不要与广受欢迎的社区支持的 XrmToolbox 应用程序混淆。

    XrmToolkit 使您能够直接从 Visual Studio 配置、构建和发布插件。这大大简化了发布更新的过程。

    Microsoft 曾经有一个 Developer Extensions 工具,Jason Lattimer 也有一个,但我不确定其中任何一个是否正在积极开发中。

    我通常采用的另一种技术是将插件代码放入 Visual Studio 共享项目中,我从插件项目和控制台应用程序中都引用了该项目。在发布插件之前,我使用控制台应用程序进行开发和调试。插件上线后,我将继续使用控制台应用程序进行故障排除或构建增强功能。

    例如:

    ///Shared Project
    public class MyPluginApp
    {
        private IOrganizationService svc;
        public MyPluginApp(IOrganizationService svc)
        {
            this.svc = svc;
        }
    
        public void Run(Account target)
        {
            //do stuff with the Target
        }
    }
    
    ////Plugin
    public void Execute()
    {
        var app = new MyPluginApp(context.Service);
        app.Run(context.Target);
    }
    
    ///Console App
    public static void Main()
    {
        var svc = new CrmServiceClient(connectionString);
        var target = getLastTouchedAccount(svc);
        var app = new MyPluginApp(svc); 
        app.Run(target);
    }
    

    另请参阅this answer

    【讨论】:

    • 感谢您的回答阿伦。我一定会看一下 XrmToolkit,我已经在使用它来定位现有的 JScript——虽然没有意识到它与 VS 集成!我还将发布另一个答案,我设法在谷歌上挖掘了有关如何让 CRM 开发工具在 VS2017 上运行的信息。我现在有这个工作,它可以一键发布和部署 - 很好;)再次感谢你,我会接受你的回答。
    • 谢谢戴夫,很高兴为您提供帮助!并感谢您发布在 VS 2017 中安装开发者工具包的说明。在几年前我搬到 XrmToolkit 之前,我曾为此苦苦挣扎。 XrmToolkit 仅安装在 VS 中,因此它可能是您用来定位现有 JScripts 的 XrmToolbox...
    • 请注意“XrmToolBox”使用 Pascal Case 命名约定 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2020-06-22
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多