gpt4 book ai didi

c# - 以框架为目标到底意味着什么,我如何最大限度地提高兼容性?

转载 作者:IT王子 更新时间:2023-10-29 03:57:48 25 4
gpt4 key购买 nike

大家好

自从我第一次开始使用 C# 编写代码以来,这一直困扰着我。我的目标是创建一个程序集,该程序集将在用户拥有的最新 .NET 框架上运行,无论是什么。我不想要求安装 .NET 4,但我想在用户拥有它的情况下使用它,更重要的是,我希望它在用户 .NET 的情况下仍然有效4,下面什么都没有。我开始怀疑这是不可能的。

当我在 Visual Studio 中更改“目标框架”时,我真的不明白我在选择什么。这是否意味着“将与此版本及更高版本兼容”?或者“将只与这个版本兼容”?到目前为止似乎是后者;我在虚拟机中的测试显示 .NET 4 目标程序集在没有 .NET 4 的情况下失败,而 .NET 3.5 目标程序集在没有 .NET 3.5 的情况下失败。有没有办法设置它以便我可以获得最大的兼容性?

更新:为了澄清,我有一个针对 .NET 2 的程序。这里的海报似乎表明它应该加载 .NET 4。但是在只有 .NET 4 且之前没有任何东西的环境中,它无法加载加载。

UPDATE2:好的,明白了,但它比这里的海报似乎想的要复杂得多。我正在打开一个不同的问题来讨论复杂性,但简短的版本是,你需要一个带有 <supportedRuntime version="v4.0" /> 的 app.config。如果您想在 .NET 4 上运行非 .NET 4 程序集,则在其中。没有它它们将无法加载。

最佳答案

框架被设计为向后兼容;如果你有一个用 .NET 2.0 编写的程序,你可以在 4.0 运行时运行它,因为没有一个框架会删除以前版本的功能(这就是为什么我们仍然有像 ArrayList 这样的非泛型集合,即使它们已被弃用,取而代之的是通用集合)。然而,反之则不一定成立。 4.0 应用程序不能保证在 2.0 中运行,因为它可以利用新运行时的新功能,这些功能在以前的版本中不可用。在任何情况下,如果您希望您的应用尝试在它没有专门针对的运行时版本上运行,您必须在 app.config 中使用 SupportedRuntime 元素指定。

要回答您的具体问题,您可以按照以下基本步骤进行操作:

  • 开发您的应用以您想要支持的最早框架版本为目标。这将禁止访问较新运行时的较新功能(例如 3.5 中的 Linq 和 4.0 中的动态类型),确保您的应用不需要任何受支持的运行时无法提供的功能。

  • 使用 app.config 文件中的 SupportedRuntime 元素指定您的应用程序可接受的框架。这将告诉初始化运行时的 native 代码,您的应用程序将在该运行时中运行,如果它找不到目标版本,则可以接受任何其他版本。我相信行为是首先寻找目标框架,如果不可用,它应该使用最新的支持运行时。

关于c# - 以框架为目标到底意味着什么,我如何最大限度地提高兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com