我有一个使用图书馆的项目(来自nuget)
我项目的目标框架目前是4.0
我正在使用库中的对象和方法,我得到了智能感知......
但是,当我构建时,编译失败并带有
找不到类型或命名空间。您是否缺少using指令或程序集引用?
如果我将项目的目标框架更改为4.5,则会编译。
有没有办法解决这个问题?
修改
作为一个具体示例,以下是在一个特定情况下重现此问题的步骤。
将目标框架设置为4.0
Nuget install paymill wrapper
使用Paymill包装器中的一种类型。例如:
using PaymillWrapper.Models;
using PaymillWrapper.Service;
public class MyClass
{
private readonly PaymentService _paymentService;
}
VS不抱怨。收到错误:
找不到类型或命名空间名称'ClientService'(您是否缺少using指令或程序集引用?)
答案 0 :(得分:4)
答案在于构建输出:
2> C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1605,5):警告MSB3274:主要参考“PaymillWrapper”无法解析,因为它是针对“.NETFramework,Version = v4.5”框架。这是比当前目标框架“.NETFramework,Version = v4.0”更高的版本。
2> C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1605,5):警告MSB3268:无法解析主要参考“PaymillWrapper”,因为它具有间接依赖性在框架程序集“System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”中无法在当前目标框架中解析。 ” .NETFramework,版本= V4.0" 。要解决此问题,请删除引用“PaymillWrapper”或将应用程序重新定位到包含“System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”的框架版本。
换句话说,NuGet包使用对.NET 4.5的引用,因此您只能在.NET 4.5+项目中使用它。
您可能想要询问Paymill Wrapper的作者是否可以发布针对.NET 4的版本。
请注意NuGet package page甚至声明:
依赖
- .NETFramework 4.5
答案 1 :(得分:0)