新的Visual-Studio项目的默认应用程序兼容性清单?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新的Visual-Studio项目的默认应用程序兼容性清单?相关的知识,希望对你有一定的参考价值。
我目前正在与一些app compat settings,specifically a certain shim战斗,并调查compatibilty
section of the application manifest。
除了详细信息之外,有一件事让我感到奇怪的是,即使使用Visual Studio 2015,似乎没有任何默认的应用程序兼容性清单(*) - 或者更确切地说,默认为none,从而默认为“Windows” Vista“wrt。在Application Manifest列出的东西。
这对我来说似乎很奇怪,但也许我错过了一些东西:
Visual C ++ / Native或C#中的每个新应用程序都是由任何不了解这些内容的团队新创建的(我敢说有很多这样的团队)将在Windows Vista兼容模式下运行。实际情况如此吗?这有什么理由吗?
(*):
...
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{...}"/>
虽然我在这:Good overview
是的,在Visual Studio 2015中新创建的项目(我只验证过.NET项目,没有原生C ++)将没有compatibility
部分,并且将在Windows Vista环境下运行,正如您所说的那样。这很容易检查。如果您创建新的控制台(例如)项目并转到项目属性 - >应用程序,您将看到在清单部分中默认声明以下内容:“使用默认设置嵌入清单”。默认设置显示什么?构建控制台项目并查看任何资源查看器,您会发现:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
如您所见,没有兼容性部分。然后运行该控制台项目(将Console.ReadKey()
设置为不立即退出)。打开资源监视器(resmon
),转到CPU部分并添加“操作系统上下文”列。您将在该列中看到“Windows Vista”以获取新的控制台应用程序 - 因此它可以在Windows Vista环境下运行。
至于理由 - 我只能对此做出假设,这里只有一个。兼容性部分的目标表述为:
本节帮助Windows确定应用程序旨在定位的Windows版本
当您在Visual Studio中创建新项目时,不知道它是否是基于Windows的更高版本中引入的行为更改的特定版本的Windows而设计的(这意味着已经过测试) - 因此采取了一种安全的方法来默认行为这在所有版本的Windows上都是相同的(从Vista开始) - 与默认行为相反,在不同版本的Windows上有所不同。对于不同的行为,您(理想情况下)应该在您支持的所有Windows版本上测试您的应用程序。当行为相同时 - 您可以测试任何一个版本。
因此,为不了解这些行为更改的开发人员提供相同的行为是合理的 - 他们在其选择的Windows版本上测试的应用程序将很乐意在其他版本上运行(关于与所提及的兼容性部分相关的功能)。
以上是关于新的Visual-Studio项目的默认应用程序兼容性清单?的主要内容,如果未能解决你的问题,请参考以下文章
Visual-Studio Manifest Tool不接受多个附加清单文件?
HKA聘请Linda Orton担任新的首席营销官兼全球业务发展官
Visual Studio 2022 Preview 3和2019 16.11发布