winscard.dll не поддерживается для UWP (System.TypeLoadException с использованием библиотеки pcsc-sharp)

Я пытаюсь использовать v4 библиотеки pcsc-sharp в приложении UWP https://github.com/danm-de/pcsc-sharp

Насколько я понимаю, в версии 4 pcsc-sharp теперь находится в стандарте .net 2.0, который поддерживает UWP.

Хорошей новостью является то, что мы можем передавать CommandApdu и читать общедоступные данные смарт-карты ISO7816. Плохая новость заключается в том, что это работает только в режиме отладки, а при запуске в режиме выпуска мы получаем следующую ошибку:

Сведения об исключении

{System.TypeLoadException: неразрешенный метод P/Invoke 'winscard.dll!SCardEstablishContext' из этого метода. Пожалуйста, найдите этот метод в предупреждениях о сборке для получения более подробной информации.

Предупреждения о сборке

Предупреждение MCG : предупреждение MCG0007: неразрешенный метод P/Invoke 'winscard.dll!SCardSetAttrib' для метода 'System.Int32 PCSC.Interop.Windows.WinSCardAPI.SCardSetAttrib(System.IntPtr, System.Int32, System.Byte[], System. Int32)». Вызов этого метода вызовет исключение во время выполнения.

Убедитесь, что P/Invoke указывает либо на Windows API, разрешенный в приложениях UWP, либо на собственную библиотеку DLL, которая является частью пакета. Если по какой-то причине ваш P/Invoke не соответствует этим требованиям, используйте [DllImport(ExactSpelling=true)], чтобы указать, что вы понимаете последствия использования API-интерфейсов, отличных от UWP.

Как вы в это вчитываетесь? Я пытаюсь сделать невозможное здесь?

Кстати, я попытался включить нативную цепочку инструментов .net в режиме отладки. вот как я получил эти детали исключения. Я также пытался работать в режимах x64 и x86, но в любом случае это не работает. он работает в режиме отладки только тогда, когда в свойствах проекта не отмечен собственный набор инструментов .net.

В соответствии с ошибкой мы должны сделать DllImport для вызова этих методов, но в коде pcsc-sharp у нас уже есть все эти файлы импорта Dll для методов, которые мы пытаемся звонить. поэтому не имеет смысла, почему он все еще дает нам эти ошибки.

Проблема Github: https://github.com/danm-de/pcsc-sharp/issues/70


person Muhammad Touseef    schedule 14.03.2018    source источник
comment
Утилита WACK — лучший способ обнаружить, что ваша программа использует компоненты, которые не разрешены/не поддерживаются в приложении UWP. Но приятно, что компилятор .NET Native также может вам это сказать. Вы должны сделать это попустительство: docs.microsoft.com /en-us/windows/uwp/security/смарт-карты   -  person Hans Passant    schedule 14.03.2018
comment
@HansPassant, мы уже пытались использовать API-интерфейс pltform для смарт-карт, но, к сожалению, мы не можем отправлять в них команды apdu для получения общедоступных данных. Вот почему нам пришлось использовать эту внешнюю библиотеку.   -  person Muhammad Touseef    schedule 14.03.2018


Ответы (1)


К сожалению, WinScard.dll в настоящее время не поддерживается для UWP. Если в SmartCard API отсутствуют функции, вы можете отправить отзыв через UserVoice или центр обратной связи.

person Peter Torr - MSFT    schedule 14.03.2018
comment
так что мы никак не можем использовать его с каким-либо принудительным исполнением, таким как dllimport или что-то в этом роде? - person Muhammad Touseef; 15.03.2018