c# - Linux 中的 .NET Core 和来自外部库的 DLLImport
问题描述
我有一个使用Microsoft.Xrm.Client
程序集的 .NET Core 项目。它在 Linux 上运行良好,除了一种特殊情况,即 Xrm.Client 想要创建顺序 GUID。它依赖于 DLLImport 和UuidCreateSequential
来自本地 Windows 的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)。缺点是这对于用户代码来说不是很方便。 - 在运行时替换
NativeMethods.UuidCreateSequential
为 .NET 实现,例如。使用和谐。 - 使用相关方法创建 linux 库,以便可以通过给定的 DLLImport 加载它。我对这个选项特别感兴趣,因为它看起来比其他选项更干净。但是,我不确定这是否可行,因为 DLLImport 在此处指定为
StdCall
. 或者也许只是因为反编译器。 - 还有什么,也许更简单?
哪种解决方案更好并且可行?一个人将如何处理它?
解决方案
推荐阅读
- javascript - 从 React 的返回方法中的数组中删除元素
- google-apps-script - replacetext 反斜杠括号不起作用
- java - 跟踪过去 15 分钟内的触摸事件数
- android - 中文设备上的 WebView 忽略强制设置的视图大小
- javascript - 我对嵌套查找的 mongodb 聚合函数有问题
- flutter - 即使在删除 Permission Handler Plugin 后,Flutter App 仍在请求权限
- python-3.x - python3中的嵌套循环
- python - 给定一列一行作为坐标填充数据框
- java - 模拟 HttpHeaders 抛出 NullPointerException
- python - 将一个数组的值映射到另一个数组