从 3.5 调用 .NET 4 库

Posted

技术标签:

【中文标题】从 3.5 调用 .NET 4 库【英文标题】:Making a call to a .NET 4 library from 3.5 【发布时间】:2011-02-15 05:46:12 【问题描述】:

我需要调用 .NET 4.0 中的 System.Xaml 库。如果您的项目针对 3.5,是否可以调用此库?

【问题讨论】:

好吧,你可以将另一个 lib 编译为 exe,也许添加一个包装器,让两个模块通过套接字、文件、shell 进行通信......但这肯定很难看。 看看微软的Reactive Extensions。它是 3.5 的一种向后兼容库 how to integrate .net library (.dll) from higher version (.net 4) with binaries from lower version (.net 2)的可能重复 【参考方案1】:

没有。您需要将项目定位为在 .NET 4 中运行,并使用 CLR v4,才能使用 .NET 4 程序集。


另一方面,这里没有真正的优势。只需将您的应用程序更改为以 .NET 4 为目标。如果您要添加对 .NET 4 框架程序集的依赖项,您不妨一开始就以 .NET 4 为目标...

【讨论】:

问题是,目前我只有 VS2008,我需要 .net 4.0 中的 Xaml(序列化)的特定功能。我希望能够通过反射或其他方式加载它。 你很快就能掌握VS2010。重新调整项目的顺序。 @mrwayne:你总是可以使用 VS 2010 Express(现在可用):microsoft.com/express 是的,不幸的是它比这更复杂一些,我在一个需要整个开发团队升级的工作场所,这意味着软件需要进行向后兼容性测试以迁移到 .净 4 等。 @mrwayne:如果您在这种类型的环境中工作,请添加一个 dep.在 .NET 4 上也可能不是一个好主意。我会等到贵公司完全迁移到 .NET 4。【参考方案2】:

这是一种Rube Goldberg-esque 解决方案,它涉及将您的 .NET 4 DLL 方法包装在 COM 中,然后从 .NET 3.5 调用该 COM 包装器:

https://www.codeproject.com/Articles/204406/How-To-Use-a-NET-Based-DLL-From-NET-Based-Appl

【讨论】:

【参考方案3】:

不,你不能以不同的方式映射程序集,你可以做的一件事是在内存中创建一个类型来重新组装你的 net 4.0 dll。

您可以使用 CECIL 获取 IL 指令。

如果你不太了解 IL,就不要尝试去做。

【讨论】:

【参考方案4】:

这个问题类似于“如何在 .NET 1.x 应用程序中使用 .NET 2 程序集”。不可能将新 CLR 的程序集添加为参考,但正如 Hamish 指出的那样,进程间通信可能会有所帮助。

【讨论】:

以上是关于从 3.5 调用 .NET 4 库的主要内容,如果未能解决你的问题,请参考以下文章

插件项目必须是.NET 3.5 其余代码库是.NET 4.0 怎么解决?

.NET 3.5 ASMX Web 服务 - 通过 .NET 3.5 服务参考调用 - 通用类重用

ASP.NET 3.5 使用 AJAX 调用 [WebMethod] - 500 错误

.NET 2 ASMX Web 服务 - 通过 .NET 3.5 服务参考调用 - 通用类重用

UnmanagedFunctionPointer 在使用 .NET 4.0 时会导致 ***,3.5 有效

使用 .NET Framework 3.5 在 C# 中调用 Web API