У меня есть проект .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
.Или, может быть, это из-за декомпилятора. - Что-нибудь еще, может быть проще?
Какое решение лучше и будет работать?Как можно подойти к этому?