Как добавить манифест сборки в исполняемый файл .NET?
манифест сборки - это XML файл, который добавляется к исполняемому файлу .NET(PE) с типом ресурса RT_MANIFEST
(24).
Сборочные манифесты используются для объявления ряда вещей об исполняемом файле, например:
-
Если я хочу отключить масштабирование DPI, потому что я хороший разработчик:
<!-- We are high-dpi aware on Windows Vista --> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application>
-
Я могу заявить, что я был спроектирован и протестирован в Windows 7, и я должен продолжать зависеть от любых ошибок в Windows 7
<!-- We were designed and tested on Windows 7 --> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--The ID below indicates application support for Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility>
-
Я могу заявить, что я хороший разработчик и не нуждаюсь в виртуализации файлов и реестра
<!-- Disable file and registry virtualization --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo>
-
Я могу заявить, что я зависит от конкретной версии 6 библиотеки Microsoft Common Controls:
<!-- Dependency on Common Controls version 6 --> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency>
-
Я могу заявить, что я зависит от конкретной версии GDI +:
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency>
В старые времена мы создали бы ресурс script (*.rc
), например:
wumpa.rc
1 24 AssemblyManifest.xml
добавьте этот файл в проект, и компилятор будет компилировать файл .rc
; включая ресурсы в окончательном исполняемом изображении.
За исключением Visual Studio 2010, похоже, не имеет возможности добавить ресурс script к проекту.
Как добавить ресурс script в проект в Visual Studio 2010?
Как добавить манифест сборки в проект в Visual Studio 2010?
Примечание. Любое решение должно работать в среде с контролем источника и несколькими разработчиками (например, жестко закодированные пути, возможно, не установленные двоичные файлы будут разрушать сборку, а не работать).
Бонус-чат
- VS2010/.NET: как встраивать ресурс в исполняемый файл .NET PE?
- VS2005: Как вставить манифест в сборку: позвольте мне подсчитать пути... (не может быть сделано)
Обновить: Майкл Фокс предлагает, чтобы диалог свойств проекта можно было использовать для включения манифеста сборки, но он не указывает, где:
Обновить: все, что я пробовал:
- На экране свойств проекта выберите Приложение. Выберите параметр радио Значок и манифест. В Манифест оставьте вариант по умолчанию
Embed manifest with default settings
:
Не работает, потому что он содержит манифест с настройками по умолчанию, а не мои настройки.
-
В Манифест измените параметр комбо для
Create application without a manifest
:Не работает, потому что в нем нет манифеста
-
В разделе Ресурсы выберите параметр Файл ресурсов:
Не работает, потому что вы не можете выбрать манифест сборки (или ресурс script, который содержит манифест сборки)
-
В разделе Ресурсы выберите параметр Ресурсный файл, затем введите путь к XML файлу манифеста сборки:
Не работает, потому что Visual Studio задыхается, когда отображается манифест сборки:
- В разделе Ресурсы выберите параметр Ресурсный файл, затем введите путь к ресурсу script:
Не работает, потому что Visual Studio задыхается, когда отображается ресурс script:
-
Добавьте
AssemblyManifest.xml
в мой проект, а затем найдите его в поле Манифест:Не работает, потому что файл манифеста Ассамблеи не указан в качестве опции
У меня есть еще дюжина других вещей, которые я могу сохранить для скриншотов (добавьте файл .rc в решение, найдите его в раскрывающемся списке, выберите "no manifest" и измените действие сборки
wumpa.rc
на разные вещи, постройте.rc
, используя отдельный компилятор ресурсов, либо вручную, либо шаг предварительной сборки /msbuild, и выберите этот.res
файл в качестве моего ресурса). я перестану добавлять дополнительный объем к моему вопросу и надеюсь на ответ.