【问题标题】:How to integrate a COM object in Dynamics Ax 2009 on server side?如何在服务器端的 Dynamics Ax 2009 中集成 COM 对象?
【发布时间】:2015-02-03 17:24:00
【问题描述】:

我有一个 .NET 4.0 dll,我想在服务器端集成到 Dynamics Ax 2009。在客户端(RunOn:客户端),它适用于 32 位 dll。但是在服务器端(RunOn:server),它不起作用。

这是我的工作: (1) 我将一个 64 位 dll 的实例复制到 AOS 的 bin 文件夹中,并且 (2) 我使用 Regasm.exe 将必要的条目添加到注册表中。

我使用以下代码后:

server static void ComIntegrationTest(Args _args)
{
    COM com;
    ;
    new InteropPermission(InteropKind::ComInterop).assert();
    com = new COM('{A2686EE2-8382-3D04-B908-31AF4E5AF5B5}');
    CodeAccessPermission::revertAssert();
}

我收到以下错误消息: 无法创建类“{A2686EE2-8382-3D04-B908-31AF4E5AF5B5}”的 COM 对象。确保对象已在计算机“MSS2008R2-AXAOS”上正确注册。 无法创建对象“COM”

或者,如果我使用 Com 类包装器向导将 COM 对象包装在 x++ 类中,并尝试创建包装器类的实例,我会收到以下错误消息: 请求“InteropPermission”类型的权限失败。 无法创建对象“COM”。

编辑:

如果无法做到这一点,我如何将 Dynamics Ax 2009 与 .NET 4.0 集成?

无法直接引用 GAC 中的 .NET 4.0 dll,因为 Dynamics Ax 2009 仅与 .NET 3.5 或以前版本的 .NET 兼容。

【问题讨论】:

  • 我很惊讶我以前没有看到过关于 AX2009 的这个问题。下面是如何制作 COM 对象的链接,但从阅读以上内容看来,您已经采取了所有正确的步骤。 blogs.microsoft.co.il/arik/2011/05/30/…

标签: axapta x++ dynamics-ax-2009


【解决方案1】:

我认为您正在混合 .Net 和 COM 集成,它们生活在不同的星球上。

你应该strongly sign你的.Net程序集,然后register in GAC

另请参阅this problemthis description part 1part 2

【讨论】:

  • 感谢您的回答。在 Dynamics Ax 2009 中,只能将签名的 .NET 3.5 dll 用作在 GAC 中注册的 clr 对象。我有一个使用 .NET 4.0 的第 3 方 dll,因此我做不到。因此,我正在尝试 COM 集成。它在 Axapta 3.0 中运行良好。
  • 当我说 COM 集成时,我的意思是我使用以下命令将 .NET dll 注册到注册表:regasm /tlb:MyWrapper "MyWrapper.dll"。然后我从 Dynamics Ax 引用它: Com com = new COM('{A2686EE2-8382-3D04-B908-31AF4E5AF5B5}')。
  • 不要使用new COM 引用.Net 程序集。
  • 它以这种方式在客户端工作(使用 COM)。但如果它在 GAC 中,我不能将它作为 clr 对象引用,因为它使用 .NET 4.0,而 Dynamics Ax 2009 与 .NET 4 不兼容。
猜你喜欢
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多