C#项目是否可以使用多个.NET版本?

11

我自学编程,不确定这种情况是否可能。我也不知道我在这里提出的问题是否有专门的名称(例如:“你所问的被称为xxxxxx”)。我在这个主题上找不到任何东西(但是找到了一些升级文章,这不是我想要的,所以请原谅如果这对于核心程序员来说听起来像一个新手问题;我是初学者)。

我有一个小项目,由于包含一些外部库而依赖于.NET 2.0。软件运行良好,但现在需要添加功能;这些功能在.NET 4.0或4.5下编程会更容易实现。

然而,那个包含的外部库不在那个.NET版本中,所以现在我想知道:一个项目是否可以有多个.NET版本?

我不确定,但也想到过只将我的新函数编写为一个依赖于.NET 4.5的dll,在其中使用另一个项目编写我的公共函数,然后在依赖于.NET 2.0的prj中包含最终的dll...不确定这是否是正确的做法。


从我在Microsoft存储库中看到的内容来看,他们为每个他们想要支持的.NET版本创建了单独的项目... - Callum Linington
你不应该能够只使用任何依赖于较低(或相等)版本的.Net的库吗? - germi
9
除混合模式程序集外,我期望在.NET 4.0或4.5中构建的程序集通常可以正常工作,即使它们最初是用.NET 2.0构建的... - Jon Skeet
更好的看待这个问题是C#向后兼容。我认为几乎是最好的答案,因为之前已经有人问过了。可以参考以下链接:https://dev59.com/jk3Sa4cB1Zd3GeqPydEo 或 https://dev59.com/9G445IYBdhLWcg3wAFm0 - ShufflerShark
4个回答

7

是的,你可以将.NET 2程序集包含到.NET 4或.NET 4.5项目中(或任何版本都可以)。在.NET 2项目中包含.NET 4程序集是不起作用的。

如果你想在基础项目中使用新功能,则需要升级依赖它的所有项目。确保整个树支持.NET 4(例如Office插件或其他相关软件可能使用)。

一个例外是使用混合模式程序集(同时使用.NET和非托管代码的程序集),它们与CLR更紧密相连,可能会导致由于活动策略而引起的问题MSDN)。


V2混合模式程序集可以通过使用useLegacyV2RuntimeActivationPolicy在V4运行时下工作:https://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx - Jonathan Dickinson
@JonathanDickinson:确实。请查看激活策略下的链接。已添加MSDN链接。 - Patrick Hofman
那么您的意思是我的主应用程序必须转换为v4,而我必须在某种特殊策略(作为v4的一部分)中保留v2中的例程吗? - user613326
@user613326:不,如果您打算在.NET 4项目中包含一个子项目来使用.NET,那是可以的。反过来就不行了。混合程序集也会出现问题(我怀疑您不会使用它)。 - Patrick Hofman

3
您只能使用一个.NET版本,那就是您的主要应用程序所需的版本(或已配置为使用的版本)。然而,.NET在很大程度上与旧版本向后兼容,并且通常可以在框架的新版本中无需更改旧组件即可运行。因此,即使您的应用程序正在运行.NET 4或4.5,您仍然可以使用针对.NET 2编写的组件(或库)(尽管可能会受到一些限制,如其他人所提到的)。这些组件只是在4.5 CLR下运行(假设它们没有向后兼容性问题),这种情况很少但确实存在。但请记住的关键是,您正在运行的应用程序必须是包含的任何组件中最高版本的。换句话说,如果您有4.5组件,则无法将应用程序作为2.0应用程序运行。必须反过来。

1

0

是的,你可以包含。这就是CLS所做的。

如果你想在一个基础项目中使用新功能,你需要升级所有基于它的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接