Linux 中的 .NET Core 和从国外库导入的 DLL

问题描述 投票:0回答:1

我有一个使用

Microsoft.Xrm.Client
程序集的 .NET Core 项目。它在 Linux 上运行良好,除了一种特定情况,即 Xrm.Client 想要创建顺序 GUID。它依赖于 DLLImport 并从本机 Windows 的
UuidCreateSequential
调用
Rpcrt4.dll
。当然,在 Linux 上它会崩溃。

相关(反编译)代码是:

namespace Microsoft.Xrm.Sdk.Client
{
  [SecurityCritical]
  internal static class NativeMethods
  {
    [SecurityCritical]
    [DllImport("Rpcrt4", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
    public static extern long UuidCreateSequential(ref Guid ptrGuid);
  }
}

我不控制这段代码,我认为我的选择是:

  • 以某种方式使用 Xrm.Client,这样它就不会调用
    NativeMethods.UuidCreateSequential
    (我自己在任何地方提供 GUID)。缺点是这对于用户代码来说不太方便。
  • 在运行时用 .NET 实现替换
    NativeMethods.UuidCreateSequential
    ,例如。使用和谐。
  • 使用相关方法创建linux库,以便可以通过给定的DLLImport加载它。我对这个选项特别感兴趣,因为它看起来比其他选项更干净。但是,我不确定这是否可行,因为此处使用
    StdCall
    指定了 DLLImport。或者也许只是因为反编译器。
  • 还有其他可能更简单的吗?

哪种解决方案更好并且有效?人们会如何处理它?

c# linux .net-core pinvoke dllimport
1个回答
0
投票

时间已经过去了,还有选择。问题是 Microsoft.Xrm.Client 仅兼容 .NET Framework

Microsoft.PowerPlatform.Dataverse.Client 必须用于 .NET 6+。您可以在 Transition apps to Dataverse ServiceClient

阅读有关使用此 nuget 的更多信息

但是,此软件包与本地版本不兼容,因为它在提供的链接中给出了注释:

保持您的应用程序项目和代码不变。继续使用 Microsoft.CrmSdk.CoreAssemblies NuGet 包和 CrmServiceClientclass。

© www.soinside.com 2019 - 2024. All rights reserved.