在Visual Studio中设置一个"Target framework"有什么作用
What is the effect of setting a "Target framework" in Visual Studio
在 Visual Studio 中,您可以为您的项目设置 "Target framework"。
众所周知,如果将 "Target framework" 设置为(例如).NET 4.5.2,则应用程序在只有 .NET 的计算机上不会 运行 4.5.1 已安装。
第一个问题:这是真的吗?
第二个问题:这个设置还有其他影响吗?
在我的公司,我们目前将应用程序的最低要求设置为 .NET 4.5.2。因此我们当然要设置 "Target framework" 。
我们使用的内部库设置为 .NET 4.5 的 "Target framework"。我们想知道这是否会产生影响,或者库是否也应该设置为 .NET 4.5.2。
我认为这应该无关紧要,但我没有找到关于该主题的任何资源。你怎么看?
第一个问题:这是真的吗?
视情况而定。如果您的应用程序针对 4.5.2 但不使用 4.5.2 中但不在 4.5.1 中的任何内容,那么 理论上 它会 运行 在只安装了 4.5.1 的机器。 (可能会检查 program/installer 运行s 以检查是否安装了 4.5.2,但您可以禁用它)
但是,如果您的应用程序使用 4.5.2 中但不在 4.5.1 中的函数(或其他),那么您的应用程序将不会 运行 在 4.5.1 机器上。
作为一般规则,您应该只将目标设置为所需的最小值。 IE。如果您不使用 4.5.2 特定功能,则不要将其定位为 4.5.2,因为没有必要。如果可以,最好将目标设置为 4.5.1,因为您可以 运行 在 4.5.2 和 4.5.1 机器上都可以。目标越低越好,因为它有可能在更多机器上 运行。
同样的规则也适用于所有其他框架,(即,如果您的 Android 应用程序只需要级别 18 API,则将目标(或至少是最低目标)设置为18 而不是更高。
第一个问题:
简答 - 是。
无论何时更新框架,都无法保证可能进行了哪些添加或错误修复或更改,这与任何类型的软件更新都是相同的原则。我的意思的一个很好的例子可能是一个应用程序,它通过添加或删除一些来更改它的配置设置,并在它的代码中使用这些设置。如果您然后尝试用以前版本的配置文件替换更新的配置文件,应用程序会中断,对吗?这里也是一样的道理。如果您尝试使用需要比当前 运行ning 更新版本的 .NET Framework 的应用程序,那么例如,您的应用程序所依赖的某些功能可能不存在。因此 .NET 应用程序将只查找它们的最低 .NET 版本,而不会低于该版本。
第二个问题:
如果您的目标是该框架的早期版本,例如 .NET 2.0,您将无法获得 LINQ 等功能,但如果您希望应用程序 运行 在几乎任何带有 .NET 的计算机上运行。 NET 那么这是最安全的选择。
希望对您有所帮助!
框架设计为向后兼容;如果您有一个用 .NET 2.0 编写的程序,您可以 运行 在 4.0 运行 时间,因为 none 的框架会删除以前版本具有的功能(这就是为什么我们仍然有像 ArrayList 这样的非泛型集合,尽管它们已被弃用以支持泛型集合)。然而,反之则不一定成立。不能保证 4.0 应用程序在 2.0 中 运行,因为它可以利用新 运行time 的新功能,这些功能在以前的版本中不可用。在任何情况下,如果您希望您的应用程序尝试 运行 在它没有专门针对的 运行 时间版本上,您必须使用 SupportedRuntime 元素在 app.config 中指定。
在 Visual Studio 中,您可以为您的项目设置 "Target framework"。
众所周知,如果将 "Target framework" 设置为(例如).NET 4.5.2,则应用程序在只有 .NET 的计算机上不会 运行 4.5.1 已安装。
第一个问题:这是真的吗? 第二个问题:这个设置还有其他影响吗?
在我的公司,我们目前将应用程序的最低要求设置为 .NET 4.5.2。因此我们当然要设置 "Target framework" 。 我们使用的内部库设置为 .NET 4.5 的 "Target framework"。我们想知道这是否会产生影响,或者库是否也应该设置为 .NET 4.5.2。
我认为这应该无关紧要,但我没有找到关于该主题的任何资源。你怎么看?
第一个问题:这是真的吗?
视情况而定。如果您的应用程序针对 4.5.2 但不使用 4.5.2 中但不在 4.5.1 中的任何内容,那么 理论上 它会 运行 在只安装了 4.5.1 的机器。 (可能会检查 program/installer 运行s 以检查是否安装了 4.5.2,但您可以禁用它)
但是,如果您的应用程序使用 4.5.2 中但不在 4.5.1 中的函数(或其他),那么您的应用程序将不会 运行 在 4.5.1 机器上。
作为一般规则,您应该只将目标设置为所需的最小值。 IE。如果您不使用 4.5.2 特定功能,则不要将其定位为 4.5.2,因为没有必要。如果可以,最好将目标设置为 4.5.1,因为您可以 运行 在 4.5.2 和 4.5.1 机器上都可以。目标越低越好,因为它有可能在更多机器上 运行。
同样的规则也适用于所有其他框架,(即,如果您的 Android 应用程序只需要级别 18 API,则将目标(或至少是最低目标)设置为18 而不是更高。
第一个问题:
简答 - 是。
无论何时更新框架,都无法保证可能进行了哪些添加或错误修复或更改,这与任何类型的软件更新都是相同的原则。我的意思的一个很好的例子可能是一个应用程序,它通过添加或删除一些来更改它的配置设置,并在它的代码中使用这些设置。如果您然后尝试用以前版本的配置文件替换更新的配置文件,应用程序会中断,对吗?这里也是一样的道理。如果您尝试使用需要比当前 运行ning 更新版本的 .NET Framework 的应用程序,那么例如,您的应用程序所依赖的某些功能可能不存在。因此 .NET 应用程序将只查找它们的最低 .NET 版本,而不会低于该版本。
第二个问题:
如果您的目标是该框架的早期版本,例如 .NET 2.0,您将无法获得 LINQ 等功能,但如果您希望应用程序 运行 在几乎任何带有 .NET 的计算机上运行。 NET 那么这是最安全的选择。
希望对您有所帮助!
框架设计为向后兼容;如果您有一个用 .NET 2.0 编写的程序,您可以 运行 在 4.0 运行 时间,因为 none 的框架会删除以前版本具有的功能(这就是为什么我们仍然有像 ArrayList 这样的非泛型集合,尽管它们已被弃用以支持泛型集合)。然而,反之则不一定成立。不能保证 4.0 应用程序在 2.0 中 运行,因为它可以利用新 运行time 的新功能,这些功能在以前的版本中不可用。在任何情况下,如果您希望您的应用程序尝试 运行 在它没有专门针对的 运行 时间版本上,您必须使用 SupportedRuntime 元素在 app.config 中指定。