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


我自学编码,我不确定这是否可行。 我也不知道我在这里要求的是什么名称(例如:“你问的是什么叫xxxxxx”)。我找不到关于这个主题的任何内容(但确实找到了一些升级文章,这不是我想要的,所以请原谅我,如果这听起来像是对核心编码员的NOOB问题;我是初学者)。

我有一个依赖.NET 2.0的小项目,因为包含了一些外部库。该软件运行良好,但现在它需要增加功能;在.NET 4.0或4.5下更容易编程的东西。

但是,包含外部库的内容不在.NET级别,所以现在我想知道:一个项目可以有多个.NET版本吗?

我不确定但也在思考也许我只是将我的新函数编写为依赖于.NET 4.5的dll,我在其中将我的公共函数编写在一个不同的项目中,然后在我的prj中包含最后的dll依赖于.NET 2.0 ......不确定这是否可行。


8081
2018-06-02 10:37


起源

从我在Microsoft存储库中看到的,他们为每个他们想要支持的.NET版本都有单独的项目.... - Callum Linington
您是否应该只使用任何依赖于较低(或相等).Net版本的库? - germi
除了混合模式程序集之外,我希望构建在.NET 2.0上的程序集通常只能在.NET 4.0或4.5中运行... - Jon Skeet
更好的观察方式是c#向后兼容。几乎是我认为最好的答案。 stackoverflow.com/questions/2843318/... 要么 stackoverflow.com/questions/5084921/... - ShufflerShark


答案:


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

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

一个例外是使用 混合模式组件 (同时使用.NET和非托管代码的程序集),这些程序对CLR更为严格,可能会导致这种情况 由于活动政策导致的问题 (MSDN)。


7
2018-06-02 10:54



可以使用useLegacyV2RuntimeActivationPolicy使V2混合模式程序集在V4运行时下工作: msdn.microsoft.com/en-us/library/bbx34a2h.aspx - Jonathan Dickinson
@JonathanDickinson:的确如此。请参阅激活策略下的链接。添加了MSDN链接。 - Patrick Hofman
那么你的意思是我的主要应用程序必须转换为v4,而我必须在某些特殊政策(v4的一部分)中保留v2中的例程吗? - user613326
@ user613326:不,如果您打算在子项目中使用.NET包含在.NET 4项目中,那没关系。另一种方式不是。混合组件也存在问题(我怀疑你使用它)。 - Patrick Hofman


您只能使用一个.NET版本,这是您的主应用程序需要(或配置)使用的版本。但是,.NET在很大程度上与旧版本向后兼容,并且通常可以在较新版本的框架中更改旧的程序集。

因此,即使您的应用程序可能正在运行.NET 4或4.5,您也可以使用为.NET 2编写的程序集(或库)(尽管某些限制可能适用,正如其他人所提到的那样)。这些程序集只在4.5 CLR下运行(假设它们没有向后兼容性问题),这种情况很少见但确实发生了。

但要记住的关键是,运行的应用程序必须是任何包含的程序集的最高版本。这意味着,如果您有4.5个程序集,则无法将您的应用程序作为2.0应用程序运行。它必须是相反的方式。


2
2018-06-02 11:41





听起来您正在寻找并行执行,尤其是进程内并行执行:

进程内并行执行


1
2018-06-02 10:44





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

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


0
2018-06-02 14:00