UWP: сбой теста WACK при проверке метаданных среды выполнения Windows

У меня есть приложение C#, предназначенное для настольной платформы Windows-10. Приложение C# обращается к нативному компоненту, написанному на C++. Мой родной код C++ имеет расширения компонентов Visual C++ (C++/CX).
Я пытаюсь запустить тест WACK для своего приложения и вижу эту ошибку:

Обнаружена ошибка: общий тест на корректность метаданных обнаружил следующие ошибки: перегруженный метод XXX в yyy.winmd имеет то же число входных параметров, что и метод DefaultOverloadAttribute. Точно один метод перегрузки должен иметь DefaultOverloadAttribute
Влияние, если не исправлено: хранилище Windows не разрешает приложениям, которые не проходят проверку метаданных среды выполнения Windows.
Как исправить: убедитесь, что компилятор, который вы используете для генерации типов среды выполнения Windows, соответствует спецификациям среды выполнения Windows

Раньше это нормально работало с VS-2015 Update 2. Я установил VS-2015 Update-3 сегодня, и с тех пор я вижу этот сбой.
Странно то, что упомянутый в отчете об ошибке перегруженный метод вообще не перегружен.
Я проверил эту страницу MSDN, но не смог найти никакого решения.
Мои детали VS следующие:

MS VS Professional 2015
Версия 14.0.25425.01 Обновление 3
MS.NET Framework
Версия 4.6.01038

Я нигде не мог найти никаких спецификаций среды выполнения Windows. Нужно ли что-нибудь дополнительное после установки VS Update-3?

1 ответ

Решение

Кажется, это проблема компилятора VS. В основном, WACK-инструмент жалуется на любое имя пользователя, которое называется " Close ".


Компилятор добавляет реализацию IClosable всякий раз, когда пользовательский класс ref имеет явный деструктор. Затем он сопоставляет деструктор с методом " IClosable:: Close ". Но компилятор не жалуется на определенный пользователем метод с именем " Закрыть ".


При дальнейшем копании я обнаружил, что SQLite также, похоже, имеет аналогичные проблемы. Это именно та проблема, которую я затрагиваю.
Это решение, используемое SQLite.
Посмотрев на решение SQLite, я изменил имя метода с " Close " на " Closedb ", и теперь мои тесты WACK проходят.
На момент публикации единственное решение этой проблемы, похоже, заключалось в том, что в вашем коде нет метода с именем " Закрыть ".

Другие вопросы по тегам