/ metadata_dir требуется, чтобы сообщить MIDLRT, где он может найти определения основных типов, которые MIDLRT требует по историческим причинам.Практически, это должно указывать на каталог, содержащий winmd, который определяет типы из пространства имен Windows.Foundation в Windows SDK, но вы можете использовать C: \ Windows \ System32 \ WinMetadata, если вы в затруднении (так как первый сложныйотслеживать).Очевидно, что вы захотите сделать это только для тестирования / эксперимента, поскольку вы будете в восторге от любой сборки ОС, на которой вы работаете.Правильная форма выглядит примерно так:
midlrt sample.idl /metadata_dir "C:\Program Files (x86)\Windows Kits\10\References\10.0.18362.0\Windows.Foundation.FoundationContract\3.0.0.0"
Найти этот путь довольно сложно.Начните с поиска пути установки SDK в реестре.Затем выберите версию SDK, на которую вы хотите настроить таргетинг.Тогда найдите последнюю версию учредительного договора.Вы можете посмотреть, как C ++ / WinRT делает это здесь:
https://github.com/microsoft/xlang/blob/master/src/library/impl/cmd_reader_windows.h
/ reference - более новая функция, в которой вы можете использовать ее для импорта определений из winmd вместо необходимости импортировать/ включить определения с использованием IDL.Это в основном оптимизация, так как это происходит намного быстрее, чем включение соответствующих определений IDL.
Вам все равно нужно использовать / metadata_dir независимо от того, используете ли вы / reference, поскольку они используются для разных целей.Это отличается от cppwinrt.exe, где он имеет только один флаг гармонизированной ссылки.