在Visual Studio中设置“目标框架”的作用是什么?

在Visual Studio中,您可以为项目设置“目标框架”。

或许不太常见的是,如果将“目标框架”设置为(例如).NET 4.5.2,则在仅安装了.NET 4.5.1的计算机上,应用程序将无法运行。

第一个问题:这是真的吗? 第二个问题:那个环境还有其他影响吗?

在我的公司,我们目前正在为.NET 4.5.2设置应用程序的最低要求。 因此,我们当然是设定“目标框架”。 我们使用的内部库设置为.NET 4.5的“目标框架”。 我们想知道这是否会产生影响,或者库是否也应该设置为.NET 4.5.2。

在我看来,这应该没关系,但我没有找到关于该主题的任何资源。 你怎么看?

第一个问题:这是真的吗?

这取决于。 如果您的应用程序是针对4.5.2但不使用4.5.2中的任何内容而不是4.5.1中的任何内容,那么理论上它将在仅安装了4.5.1的计算机上正常运行。 (可能会检查程序/安装程序是否运行以检查是否已安装4.5.2,但您可以禁用此function)

但是,如果您的应用程序使用4.5.2中的函数(或其他函数)而不是4.5.1中的函数,那么您的应用程序将无法在4.5.1计算机上运行。

作为一般规则,您应该只将目标设置为所需的最小值。 即如果您不使用4.5.2特定function,则不要将其作为4.5.2的目标,因为没有必要。 如果可以,最好将目标设置为4.5.1,因为您可以在4.5.2和4.5.1机器上正常运行。 降低目标越好,因为它可能会在更多机器上运行。

同样的规则适用于所有其他框架,(即如果您的Android应用程序只需要18级API,那么将目标(或至少是最小目标)设置为18而不是更高。

第一个问题:

简短的回答 – 是的。

每当更新框架时,无法保证可能添加或修复了哪些错误或更改,这与任何类型的软件更新都是相同的原则。 我的意思的一个很好的例子可能是一个应用程序通过添加或删除一些来改变它的配置设置,并在其代码中使用这些设置。 如果您尝试将更新的配置文件替换为以前的版本,那么应用程序会破坏吗? 这是同样的原则。 如果您尝试使用需要比当前运行的.NET框架更新版本的应用程序,那么例如,某些function可能不在您的应用程序所依赖的位置。 因此.NET应用程序只会查找它们的最低.NET版本,而不是低于它。

第二个问题:

如果您定位早期版本的框架(例如.NET 2.0),您将无法获得LINQ等function,但如果您希望应用程序几乎在安装了.NET的任何计算机上运行,​​那么这是您最安全的选择。

希望这可以帮助!

框架旨在向后兼容; 如果你有一个用.NET 2.0编写的程序,你可以在4.0运行时运行它,因为没有一个框架会删除先前版本的function(这就是为什么我们仍然有像ArrayList这样的非generics集合,即使他们被弃用以支持通用集合。 但是,反过来不一定是真的; 4.0应用程序不能保证在2.0中运行,因为它可以利用新运行时的新function,这些function在以前的版本中是不可用的。 在任何情况下,如果您希望您的应用程序尝试在没有专门定位的运行时版本上运行,则必须使用SupportedRuntime元素在app.config中指定该应用程序。