Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The type or namespace <blah> does not exist

Tags:

Ok, I have had this one a million times before and it's been answered 1 million +1 times before.

And yet, once again. I have 3 projects, A, B, and C, each a DLL. Each project is .Net 4.0 (not the client build, full 4.0). Project C references A and B. They are referenced as projects, and the output is set to copy locally.

In C, I have two using statements in my .cs file:

using A; using B; 

When I compile, I get the complaint that is cannot find B. A is fine. B depends on A.

What the heck should I do? I've removed and re-added, closed VS2010, re-opened it, looked at the .csproj file. And I just cannot get it. Again, for the millionth time.

Someone please slap enough sense into me that I learn the source of this once and for all!

And yes, this is probably answered somewhere in StackOverflow, but not in any of the top answers I've checked so far. The terms are just too generic to be of use, too many questions where the answer is "duh, add a reference". I'm past that point.

Here are the errors I get. There are 3 kinds, but from past experience, the last one is the true one.

Error   130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?)   Error   114 'object' does not contain a definition for <blah>  Error   59  The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?)     

Aha I looked at the warnings, not just the errors, and here is what I see:

Warning 69  The referenced project '..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj' does not exist.  AWI.WWG.EXPMRI.MriUpload.Objects 

That .csproj file is the "B" in this case. Even though I remove and re-add the project reference I get this. But it feels like I'm getting closer!

Hmm, I just found another DLL, call it "D", which "A" references. When I add it to the project, I start to get the complaint:

---------------- The  Add Reference Dialog could not be shown due to the error:  The specified path, file name, or both are too long.  The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. ---------------- 

Could this be related, or just another distraction?


Ok, I found the issue, though I do not understand it.

When I add the reference through the IDE, it adds this to the csproj file of "C":

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj"> 

This does not compile, it WARNS that it cannot find the referenced project, then all those ERRORs happen. But then I change the ProjectReference to the following:

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj"> 

... and it works just fine. Note that neither of those paths are anything close to 256 characters. The fully qualified one is only 135 characters. But perhaps the IDE is doing some silly decoration of the path.

like image 240
Daniel Williams Avatar asked Jul 02 '11 18:07

Daniel Williams


2 Answers

The solution has to do with the file path limits in Windows, and they way the IDE translates relative paths into full ones, as explained in this blog.

The immediate solution is to edit the csproj file manually to use the absolute path. Until the reference is re-added, the absolute path will be valid. One day I may shorten my folders, but it's not top priority at the moment.

If you suspect you have this issue, look at the Warning messages from the compiler. I often have these turned off myself, only looking at errors. But the warning about "the referenced project does not exist" was the clue that solved this for me.

In case the other link disappears, here is the link to the MS article. http://support.microsoft.com/kb/2516078

It is worth noting that this same error manifests for a variety of issues such as client-framework-targeting issues, and is logged as a warning when a reference fails to load. Presumably the reference error is only a warning because if the reference is not actually needed it doesn't matter.

like image 149
Daniel Williams Avatar answered Sep 30 '22 12:09

Daniel Williams


I would make sure that your project has included the references to the assemblies.

enter image description here

I would check that the build order matches your dependencies

enter image description here

Finally, if everything is setup properly, you should see the following Build Order:

enter image description here

Doesn't look like this is your problem, but for completeness, I should add that another thing to check (if your project targets the .NET Framework 3.5 or above) is that the Target Framework for both projects match. If you are linking something that targets the Client Profile from a full version of the Framework, you will also get a 'not found' error:

enter image description here

like image 28
Gustavo Mori Avatar answered Sep 30 '22 14:09

Gustavo Mori