Ошибка MCG : warning MCG0007 при компиляции UWP приложения
Есть маленькое приложение UWP, которое сохраняет и считывает информацию из базы данных MySQL. Библиотека подключена из NuGet. При тестировании все работает отлично. Но при компиляции выходят подобные предупреждения. После установки приложения связи с базой данных нет. Правильно я понимаю, что [DllImport(ExactSpelling=true) нужно куда-то добавить? Не знаю куда.
MCG : warning MCG0007: Неразрешенный метод P/Invoke "secur32!AcquireCredentialsHandle" для метода "System.Int32 MySql.Data.MySqlClient.Authentication.MySqlWindowsAuthenticationPlugin.AcquireCredentialsHandle(System.String, System.String, System.Int32, System.IntPtr, System.IntPtr, System.Int32, System.IntPtr, MySql.Data.MySqlClient.Authentication.SECURITY_HANDLE, MySql.Data.MySqlClient.Authentication.SECURITY_INTEGER)".
Вызов этого метода приведет к исключению во время выполнения. Убедитесь, что P/Invoke указывает на API Windows, разрешенный в приложениях UWP, или на библиотеку DLL в машинном коде, которая является частью пакета. Если по какой-то причине P/Invoke не отвечает этим условиям, используйте [DllImport(ExactSpelling=true), чтобы показать, что вы понимаете последствия использования API, не относящихся к UWP.*
Ответы (2 шт):
Приложения UWP могут использовать неуправляемые функции только из набора разрешенных функций Windows API. Возможно, установка ExactSpelling в объявлении P/Invoke позволит вызывать любые функции в режиме разработчика, но при публикации в магазин приложение все равно не пройдет сертификацию. В данном случае код библиотеки MySqlClient вызывает функцию AcquireCredentialsHandle, которая не входит в список разрешенных API.
Раз у вас код работает, то вы, видимо, просто не используете функционал, связанный с Windows-авторизацией, и не сталкиваетесь с этой проблемой из-за этой функции. MySQL в принципе поддерживается в UWP, но, судя по этой статье, минимальная версия Windows должна быть 16299.
Решение: ссылка
Соединение с базой данных (еще) не работает официальным MySQL Connector (из-за некоторых неподдерживаемых ссылок), но есть альтернативы. Наиболее перспективными являются те, которые поддерживают .NET Standard. Например, проект MySqlConnector предлагает интерфейс, очень похожий на официальный connector . Он все еще находится в бета-версии, но регулярно обновляется и активно развивается.