新的Visual-Studio项目的默认应用程序兼容性清单?

时间:2016-05-20 13:11:26

标签: c# windows visual-studio visual-c++

我目前正在与一些app compat settingsspecifically 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

1 个答案:

答案 0 :(得分:4)

是的,在Visual Studio 2015中新创建的项目(我只验证过.NET项目,没有本机C ++)将没有compatibility部分,并且将在Windows Vista上下文中运行,正如您所说的那样。这很容易检查。如果您创建新的控制台(例如)项目并转到项目属性 - &gt;在应用程序中,您将看到在清单部分中默认声明以下内容:“使用默认设置嵌入清单”。默认设置显示什么?构建控制台项目并查看任何资源查看器,您将找到:

<?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版本上运行的应用程序将很乐意在其他版本上运行(关于与所提及的兼容性部分相关的功能)。