Как использовать мой собственный файл манифеста и встроить его в исполняемый файл с помощью Visual Studio 2017?
Я пытаюсь использовать PerMonitorV2 DPI осведомленность, которая изменяет размер не клиентской области при изменении DPI. В документации MSDN рекомендуется использовать манифест для установки режима осведомленности о DPI: настройка осведомленности о DPI по умолчанию для процесса.
Раздел "Инструмент манифеста" в свойствах конфигурации VS предоставляет только три параметра для DPI DPI Awareness: " Нет" ("Unaware"), " Hight DPI Aware" и " Per Monitor DPI Aware" (который, кажется, PerMonitorV1), поэтому мне нужно найти способ переопределить эти настройки DPI, но я не знаю как это сделать. (Мое лучшее предположение заключается в том, чтобы как-то предоставить свой собственный файл манифеста, а не полагаться на Visual Studio для его создания.)
1 ответ
В настройках инструмента манифеста вы можете определить дополнительный фрагмент манифеста, который Visual Studio объединит со стандартным. Манифест по умолчанию будет по-прежнему предоставлять <dpiAware>
тег, чтобы служить запасным вариантом для старых версий ОС, которые не понимают <dpiAwareness>
тег.
шаги:
- Откройте конфигурацию проекта, выберите "Инструмент манифеста"> "Ввод и вывод".
В поле "Дополнительные файлы манифеста" введите имя файла фрагмента манифеста, который вы хотите включить. Путь относительно вашей папки проекта.
Фрагмент выглядит следующим образом. Обратите внимание, что я удалил
<dpiAware>
тег из образца MSDN:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> </windowsSettings> </application> </assembly>
В выпадающем списке "DPI Awareness" выберите "High DPI Awareness". Как написано выше, это запасное значение для более старых версий Windows.
Результат:
Это объединенный манифест для проекта Win32, который я создал с помощью мастера приложений. Он встроен в ресурсы приложения.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>
Если вы получите два <dpiAware>
теги, вы забыли удалить <dpiAware>
из фрагмента манифеста.