我有一个使用库的项目(来自nuget)
我项目的目标框架目前是4.0
我正在使用库中的对象和方法,我得到了intellisense等…
然而,当我构建时,编译失败
找不到类型或命名空间。是否缺少using指令或程序集引用?
如果我将项目的目标框架更改为4.5,它就会编译。
有办法绕过这个吗?
编辑
作为一个具体的例子,下面是在一个特定情况下重现这个问题的步骤。
- 文件->新建项目
- 新控制台应用程序
-
将目标框架设置为4.0
-
Nuget安装paymill包装
使用Paymill包装中的一种类型。例如:
using PaymillWrapper.Models;
using PaymillWrapper.Service;
public class MyClass
{
private readonly PaymentService _paymentService;
}
VS没有抱怨
编译
接收错误:
找不到类型或命名空间名称"ClientService"(是否缺少using指令或程序集引用?)
答案在于构建输出:
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,Version=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软件包页面甚至指出:
依赖项
-.NETFramework 4.5
根据Jon Skeet的回答,问题实际上是有问题的库。
它是针对.net 4.5 构建的
我提交了一个pull请求来修复此问题。