[英]Default Application Compatibilty Manifest for new Visual-Studio projects?
我目前正在与一些app compat设置进行斗争, 特别是某个垫片 ,并查看应用程序清单的compatibilty
部分 。
详细不谈,有一点令我奇怪的是,即使是使用Visual Studio 2015年, 似乎没有成为应用程序兼容性清单(*)的默认-或者更确切地说,默认为无,从而默认为“Windows Vista“wrt。 Application Manifest中列出的内容。
这对我来说似乎很奇怪,但也许我错过了一些东西:
Visual C ++ / Native或C#中的每个新应用程序都是由任何不了解这些内容的团队新创建的(我敢说有很多这样的团队)将在Windows Vista兼容模式下运行。 实际情况如此吗? 这有什么理由吗?
(*):
...
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{...}"/>
虽然我在这: 很好的概述
是的,在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版本上测试的应用程序将很乐意在其他版本上运行(关于与所提及的兼容性部分相关的功能)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.