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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新的Visual-Studio项目的默认应用程序兼容性清单?相关的知识,希望对你有一定的参考价值。

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

答案

是的,在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,为所有人创建定义的现有方法?

Visual Studio 2022 Preview 3和2019 16.11发布

是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?

有没有办法阻止新的控制台应用程序项目默认为 .NET Framework 4 客户端配置文件?