【问题标题】:What is the effect of setting a "Target framework" in Visual Studio在 Visual Studio 中设置“目标框架”有什么效果
【发布时间】:2016-05-30 09:58:30
【问题描述】:
在 Visual Studio 中,您可以为您的项目设置“目标框架”。
众所周知,如果您将“目标框架”设置为(例如).NET 4.5.2,则应用程序在仅安装了 .NET 4.5.1 的机器上将无法运行。
第一个问题:这是真的吗?
第二个问题:该设置还有其他影响吗?
在我的公司中,我们目前将应用程序的最低要求设置为 .NET 4.5.2。因此,我们当然是在设置“目标框架”。
我们正在使用的内部库设置为 .NET 4.5 的“目标框架”。我们想知道这是否会产生影响,或者库是否也应该设置为 .NET 4.5.2。
我认为这无关紧要,但我没有找到关于该主题的任何资源。你怎么看?
【问题讨论】:
标签:
c#
.net
visual-studio
frameworks
【解决方案1】:
第一个问题:这是真的吗?
这取决于。如果您的应用程序以 4.5.2 为目标,但不使用 4.5.2 中的任何内容,但未使用 4.5.1 中的任何内容,那么 理论上它会在仅安装 4.5.1 的机器上正常运行. (可能会检查程序/安装程序运行以检查是否安装了 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,而不是更高。
【解决方案2】:
第一个问题:
简短的回答 - 是的。
无论何时更新框架,都无法保证可能进行了哪些添加或错误修复或更改,任何类型的软件更新都遵循相同的原则。我的意思的一个很好的例子可能是一个应用程序,它通过添加或删除一些来更改它的配置设置,并在它的代码中使用这些设置。如果您然后尝试将更新的配置文件替换为以前版本的配置文件,那么应用程序会崩溃吗?这里的原理是一样的。如果您尝试使用的应用程序需要的 .NET 框架版本比您当前正在运行的版本更高,那么例如,您的应用程序所依赖的某些功能可能不存在。因此,.NET 应用程序只会寻找它们的最低 .NET 版本,而不会低于该版本。
第二个问题:
如果您针对较早版本的框架,例如 .NET 2.0,您将无法获得诸如 LINQ 之类的功能,但如果您希望应用程序几乎可以在任何安装了 .NET 的计算机上运行,那么这就是您的最佳选择最安全的选择。
希望这会有所帮助!
【解决方案3】:
框架设计为向后兼容;如果你有一个用 .NET 2.0 编写的程序,你可以在 4.0 运行时运行它,因为没有一个框架会删除以前版本的功能(这就是为什么我们仍然有像 ArrayList 这样的非泛型集合,即使不推荐使用它们以支持通用集合)。然而,反过来不一定是正确的;不保证 4.0 应用程序可以在 2.0 中运行,因为它可能会利用新运行时的新功能,而这些新功能在以前的版本中不可用。在任何情况下,如果您希望您的应用尝试在它没有专门针对的运行时版本上运行,您必须在 app.config 中使用 SupportedRuntime 元素指定它。