Het type of de naamruimtenaam kon niet worden gevonden

Ik heb een C#-oplossing met verschillende projecten in Visual Studio 2010.
Het ene is een testproject (ik noem het “PrjTest“), het andere is een Windows Forms Application-project (ik noem het “PrjForm“). Er is ook een derde project waarnaar wordt verwezen door PrjForm, waarnaar het kan verwijzen en met succes kan gebruiken.

PrjFormverwijst naar PrjTest, en PrjFormheeft een klasse met een using-instructie:

using PrjTest;
  1. Referentie is correct toegevoegd
  2. using-instructie is correct op zijn plaats
  3. Spelling is correct
  4. PrjTest is succesvol gebouwd
  5. PrjForm wordt bijna gebouwd, maar breekt op de regel using PrjTest;met de fout:

Het type of de naamruimtenaam ‘PrjTest’ kon niet worden gevonden (ontbreekt u een gebruiksrichtlijn of een assembly-referentie?)

Ik heb het volgende geprobeerd om dit op te lossen:

  1. Resharper verwijderd (aangezien Resharper geen problemen had met het herkennen van het project waarnaar wordt verwezen, dacht ik dat het misschien het proberen waard was)
  2. De verwijzing en het gebruik van de instructie verwijderd en opnieuw toegevoegd
  3. PrjForm helemaal opnieuw gemaakt
  4. PrjForm bevindt zich momenteel in de PrjTest-map, ik heb geprobeerd het naar een externe map te verplaatsen
  5. De oplossing op een andere computer geladen met een nieuwe kopie van VS 2010

Ik heb mijn huiswerk gedaan en heb veel te lang online gezocht naar een antwoord, geen van de oplossingen heeft tot nu toe geholpen.

Wat kan ik nog meer proberen?


Antwoord 1, autoriteit 100%

Zie deze vraag.

Blijkbaar was dit een probleem met klantprofilering.

PrjForm is ingesteld op “.Net Framework 4 Client Profile”
Ik heb het gewijzigd in “.Net Framework 4”, en nu heb ik een succesvolle build.

Bedankt iedereen!
Ik denk dat het erop neerkomt dat na al die tijd die ik heb besteed aan online zoeken, ik de oplossing minuten na het posten vind, ik denk dat het de kunst is om de juiste vraag te weten te stellen..


Antwoord 2, autoriteit 9%

In mijn geval had ik:

DLL waarnaar wordt verwezen: .NET 4.5

Project: .NET 4.0

Vanwege de bovenstaande mismatch kon het 4.0-project niet binnen de naamruimte van de 4.5 .DLL kijken. Ik heb de .DLL opnieuw gecompileerd om .NET 4.0 te targeten en ik was in orde.


Antwoord 3, autoriteit 6%

PrjForm was ingesteld op “.Net Framework 4 Client Profile” Ik heb het gewijzigd in “.Net Framework 4”, en nu heb ik een succesvolle build.

Dit werkte ook voor mij. Heel erg bedankt. Ik probeerde een RDF-voorbeeld voor dotNet waar ik de kit van dotnetrdf heb gedownload.

NET4-clientprofiel:
Richt u altijd op het NET4-clientprofiel voor al uw client-desktoptoepassingen (inclusief Windows Forms- en WPF-apps).

NET4 Volledig raamwerk:
Target NET4 Fullalleen als de functies of samenstellingen die uw app-behoeften zijn niet opgenomen in het klantprofiel. Dit bevat:
Als u server-apps bouwt, zoals:

  • ASP.Net-apps
  • Server-side ASMX-gebaseerde webservices

Als u verouderde clientscenario’s gebruikt, zoals:
o Gebruik System.Data.OracleClient.dll dat is verouderd in NET4 en niet is opgenomen in het klantprofiel.

  • Verouderde Windows-workflow gebruiken
    Stichting 3.0 of 3.5 (WF3.0 , WF3.5)

Als u zich richt op ontwikkelaarsscenario’s en tools zoals MSBuild nodig hebt of toegang nodig hebt tot ontwerpassembly’s zoals System.Design.dll


Antwoord 4, autoriteit 5%

Een ander ding dat deze fout kan veroorzaken, is het hebben van NuGet-pakketten die zijn gebouwd met een nieuwere versie van .NET.

De oorspronkelijke fout:

frmTestPlanSelector.cs(11,7): error CS0246: The type or namespace name 'DatabaseManager' 
could not be found (are you missing a using directive or an assembly reference?) 

Verder in het logboek vond ik dit:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275: The primary reference "[redacted]\DatabaseManager\bin\Release\DatabaseManager.dll" could not be resolved because it has an indirect dependency on the assembly "System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

De oplossing was om de NuGet-pakketten opnieuw te installeren:

http://docs.nuget.org/docs/workflows/reinstalling-packages


Antwoord 5, autoriteit 4%

Ik heb de mijne opgelost omdat het andere project was gecodeerd met .NET 4.5 en het andere was gecodeerd met 4.0


Antwoord 6

Het gebruik statement verwijst naar een naamruimte, niet een project.

Zorg ervoor dat u de juiste naamruimte heeft in uw project waarnaar wordt verwezen:

namespace PrjTest
{
     public class Foo
     {
          // etc...
     }
}

Lees meer over naamruimten op MSDN:


Antwoord 7

Ik kwam dit probleem tegen dat het bleek te zijn.

Project B verwijst naar Project A.

Project A gecompileerd als A.dll (assemblagenaam = A).

Project B gecompileerd als A.dll (assemblagenaam A).

Visual Studio 2010 heeft dit niet opgevangen. Resharper was oké, maar compileerde niet. De ontwerper van WinForms gaf een misleidend foutbericht dat waarschijnlijk het gevolg was van incompatibele platformdoelen.

De oplossing, na een pijnlijke dag, was ervoor te zorgen dat de assemblages niet dezelfde naam kregen.


Antwoord 8

Het is ook mogelijk dat de projecten waarnaar wordt verwezen zich richten op .NET 4.0, terwijl het Console App Project zich richt op de .NET 4.0-clientbibliotheek.

Hoewel het misschien niet gerelateerd is aan dit specifieke geval, denk ik dat iemand anders deze informatie nuttig kan vinden.


Antwoord 9

De gecompileerde dll moet public Class hebben.


Antwoord 10

Ik had hetzelfde probleem. De doelkaders waren prima voor mij. Toch werkte het niet.
Ik heb VS2010 sp1 geïnstalleerd en deed een “Rebuild” op de PrjTest. Toen begon het voor mij te werken.


Antwoord 11

Het kader wijzigen in

.NET Framework 4-clientprofiel

deed het werk voor mij.


Antwoord 12

Voor COM/ActiveX-referenties zal VS 2012 deze fout direct bij het gebruik van de instructie weergeven. Wat best grappig is, omdat het zegt dat je misschien een gebruiksverklaring mist.

Om dit op te lossen: registreer de feitelijke COM/ActiveX dll, zelfs als deze zich in het naburige project bevindt, en voeg een verwijzing toe via het COM-kanaal, niet via het projectkanaal. Het zal Interop.ProjectName in plaats van ProjectName als referentie toevoegen en dit lost deze vreemde bug op.


Antwoord 13

Een ander probleem dat dergelijk gedrag zou kunnen veroorzaken, zijn buildconfiguraties.

Ik had twee projecten met configuraties die moesten worden gebouwd voor specifieke mappen.
Zoals Debugen Any CPUen in de tweede plaats was het Debugen x86.

Wat ik deed Ik ging naar Solution->Context menu->Properties->Configuration properties->Configurationen ik stelde al mijn projecten in om dezelfde configuraties te gebruiken Debugen x86en ook het vinkje Buildaangevinkt.

Toen begonnen de projecten correct te bouwen en konden ze naamruimten zien.


Antwoord 14

Als uw project (PrjTest) geen openbare typen in de PrjTest-naamruimte blootlegt, zal het die fout veroorzaken.

Bevat het project (PrjTest) klassen of typen in de “PrjTest”-naamruimte die openbaar zijn?


Antwoord 15

net het doelframework van de applicatie gewijzigd in “.Net Framework 4”.

En de fout is verdwenen.

veel succes;
😀


Antwoord 16

controleer uw projecteigenschappen, uw referentiepaden zouden als volgt leeg moeten zijn:

Met vriendelijke groet

Other episodes