【问题标题】:How Can i use .NET 4.0 code in C# project which is built using .NET framework 3.5? [duplicate]如何在使用 .NET framework 3.5 构建的 C# 项目中使用 .NET 4.0 代码? [复制]
【发布时间】:2013-04-08 22:34:22
【问题描述】:

我想从应该使用 .NET 3.5 构建的 C# 项目中调用使用 .NET 4.0 构建的 dll。我的意思是 .net 4.0 相关代码仅应在我的机器安装了 .net 4.0 时执行,否则只需跳过该部分。 这可能吗(任何解决方法)?如果是,那么如何实现?

【问题讨论】:

  • 不,你不能。你为什么不尝试?
  • @leppie:我试过这个并得到异常,因为“这个程序集是由比当前加载的运行时更新的运行时构建的,无法加载”所以我正在寻找任何其他可能的方式
  • 不可能。为什么不能为 .NET 3.5 编译代码?您使用什么特殊功能?
  • @leppie:实际上有些 api 需要 .NET 4.0。虽然我可以使用带有目标框架 3.5 的“NANT”构建项目,但是当调用 .NET 4.0 构建的 dll 时,它会引发上述错误。
  • 为什么需要 .NET 3.5?为什么你不能用 .NET 4 编译所有东西,这将完全消除这个问题?

标签: c# .net .net-4.0 .net-3.5


【解决方案1】:

不要将 .NET 4.0 DLL 添加到您的引用中,而是将其包装到服务中并调用该服务来访问您的方法。该服务可以是 HTTP/HTTPS 服务(例如 MVC4 RESTful WebAPI、WCF),也可以是监视放置文件夹或 SQL 表的窗口服务。

[编辑]

假设您有一个使用 .NET 3.5 构建的 Windows 服务(项目 A)。
项目 A 需要调用驻留在使用 .NET 4.0 构建的类库(项目 B)中的方法。

使用此设置,您无法从项目 A (ProjectA ---x--> ProjectB) 添加对项目 B 的引用

替代方案是:

  1. 将项目 A 升级到 .NET 4.0,然后添加对项目 B 的引用并调用您的方法
  2. 找到项目 A 和项目 B 可以在不添加直接引用的情况下进行通信的方式。当然,这是有代价的,但如果你别无选择,这是最好的方法。您可以通过两种方式做到这一点:

    2.1 HTTP API:我会使用 MVC4 Web API http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC4-and-WebAP

    2.2 数据库队列:项目 A 将请求序列化并将请求插入到共享数据库(例如 SQL)表中,项目 B 继续监视该表中的新行。对于每个新行,它会选择它们运行所需的功能并将结果存储在另一个表中。

    2.3 放置文件夹:项目 A 会将其请求和参数序列化并将其写入文件并将其存储在共享文件夹中。项目 B 一直在该共享文件夹中寻找新文件,并在看到新文件后立即读取、删除并将结果存储在共享文件夹中。

免责声明:我提出的解决方案不仅适用于小型项目,其中相当大且重要的逻辑驻留在无法移植到 .NET 3.5 的 .NET 4.0 项目中。如果您只需要运行几行 4.0 代码并且不想为大的复杂性而烦恼,那么您可能需要重新考虑您想要在 .NET 4 项目中实现的目标。您可能想查看How to reference .NET 4.0 assembly within .NET 3.5 projects

【讨论】:

  • :我不明白你的建议。我的.Net3.5编译项目其实是windows服务。请详细告诉我。
  • 我编辑了我的答案以便更好地解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2017-06-03
  • 1970-01-01
  • 2010-10-15
  • 2011-05-01
  • 2010-12-09
  • 2011-02-22
相关资源
最近更新 更多