Build error “Are you missing a using directive or assembly reference” - target framework version 4

浪尽此生 提交于 2019-12-12 06:49:49

问题


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.

  • File -> New Project
  • New Console application
  • 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?)


回答1:


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




回答2:


As per the answer by Jon Skeet, the problem is in fact, with the library in question.

It was built against .net 4.5

I submitted a pull request that fixes this.



来源:https://stackoverflow.com/questions/18368126/build-error-are-you-missing-a-using-directive-or-assembly-reference-target-f

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!