生成错误 "Are you missing a using directive or assembly reference" - 目标框架版本 4



我有一个使用库的项目(来自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请求来修复此问题。

相关内容

最新更新