.NET Core в Linux и DLLImport из сторонней библиотеки - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть проект .NET Core, в котором используется сборка Microsoft.Xrm.Client.Он отлично работает в 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, например.используя Harmony.
  • Создайте библиотеку linux с соответствующим методом, чтобы она могла быть загружена данным DLLImport.Я особенно заинтересован в этом варианте, потому что он выглядит чище, чем другие.Тем не менее, я не уверен, возможно ли это, потому что здесь указывается DLLImport с StdCall.Или, может быть, это из-за декомпилятора.
  • Что-нибудь еще, может быть проще?

Какое решение лучше и будет работать?Как можно подойти к этому?

...