更新时间:2023-02-17 13:16:53
答案在于构建输出:
2> C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets(1605,5):警告MSB3274:主要参考PaymillWrapper无法得到解决,因为它是建立对.NETFramework,版本= V4.5的框架。这是一个更高的版本比当前目标框架.NETFramework,版本= 4.0版。
2> C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets(1605,5):警告MSB3268:主要参考PaymillWrapper无法得到解决,因为它有一个间接的依赖在框架组装System.Net.Http,版本= 4.0.0.0,文化=中性公钥= b03f5f7f11d50a3a,它无法在当前的目标框架内解决。 .NETFramework,版本= V4.0。要解决此问题,要么删除提及PaymillWrapper或重新定位你的应用程序的框架版本,其中包含System.Net.Http,版本= 4.0.0.0,文化=中性公钥= b03f5f7f11d50a3a。
在换句话说,的NuGet包使用的引用,.NET 4.5,所以你只能用它在.NET 4.5 +项目。
您可能要问Paymill包装的作者,看看他们是否能公布其面向.NET 4,而不是一个版本。
请注意,的NuGet包页面连州这样的:
依赖
- .NETFramework 4.5
I've got a project that uses a library (from nuget)
The target framework for my project is currently 4.0
I'm using objects and methods from the library, I get intellisense etc...
However, when I build, compilation fails with
The type or namespace could not be found. Are you missing a using directive or assembly reference?
If I change the target framework of the project to 4.5, it compiles.
Is there a way round this?
EDIT
As a specific example, here are the steps to reproduce this problem in one particular case.
Set Target framework to 4.0
Nuget install paymill wrapper
Use one of the types in the Paymill wrapper. For example:
using PaymillWrapper.Models;
using PaymillWrapper.Service;
public class MyClass
{
private readonly PaymentService _paymentService;
}
VS doesn't complain.
Compile
Receive error:
The type or namespace name 'ClientService' could not be found (are you missing a using directive or an assembly reference?)
The answer lies in the build output:
2>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3274: The primary reference "PaymillWrapper" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".
2>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3268: The primary reference "PaymillWrapper" could not be resolved because it has an indirect dependency on the framework assembly "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0". To resolve this problem, either remove the reference "PaymillWrapper" or retarget your application to a framework version which contains "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
In other words, the NuGet package uses a reference to .NET 4.5, so you can only use it on .NET 4.5+ projects.
You might want to ask the authors of Paymill Wrapper to see if they could publish a version which targets .NET 4 instead.
Note that the NuGet package page even states this:
Dependencies
- .NETFramework 4.5