0

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

4

1 回答 1

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 项目中实现的目标。您可能想查看如何在 .NET 3.5 项目中引用 .NET 4.0 程序集

于 2013-04-16T14:55:00.687 回答