У меня есть приложение 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?
Кажется, это проблема компилятора VS. В основном WACK-инструмент жалуется на любое имя пользователя, определяемое методом «близко»
Компилятор добавляет IClosable реализация всякий раз, когда пользовательский класс ref имеет явный деструктор. Затем он сопоставляет деструктор с «IClosable :: Закрыть«метод. Но компилятор не жалуется на определенный пользователем метод с именем»близко».
При дальнейшем копании я обнаружил, что SQLite Также, похоже, есть похожие проблемы. Это именно та проблема, которую я затрагиваю.
Это решение нанятый SQLite.
Посмотрев на решение SQLite, я изменил имя метода изблизко«до»Closedb«и теперь мои испытания WACK проходят.
На момент публикации единственное решение этой проблемы, похоже, не имеет метода с именем «близко«в вашем коде.
Других решений пока нет …