2012-02-05 17 views
13

Ho implementato un convertitore per convertire Int32 in String per poter associare una proprietà a un textBox.Il tag 'XXX' non esiste nello spazio dei nomi XML 'clr-namespace: YYY'

Implemento questo convertitore nello spazio dei nomi MyApp.Converters e si chiama Int32ToStringConverter.

Poi, nel mio AXML aggiungo il riferimento al mio convertitore come segue:

<Window x:Class="MusicaDB.Views.PrincipalView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:i="namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
     **xmlns:converter="clr-namesapce:MyApp.Converters, aseembly=MyApp**"> 

Più tardi, nel windows.Resources ho:

<Window.Resources> 
     <**converter:Int32ToStringConverter** x:Key="Int32ToStringConverter" /> 
</Window.Resources> 

ottengo l'errore che il tag Int32ToString il convertitore non esiste nello spazio dei nomi MyApp.Converters, assembly = MyApp.

Ho il progetto nel disco rigido locale, nelle proprietà del progetto, la destinazione .NET è framework 4.0, non il profilo client 4.0 framework e provo a cancellare la soluzione e ricompilare ma il problema persiste.

Principalmente, queste sono le due soluzioni che trovo sempre, ma non risolvono il mio problema.

risposta

24

tre correzioni per rendere qui:

  1. Niente spazi ->xmlns:converter="clr-namesapce:MyApp.Converters,aseembly=MyApp"
  2. nessun errore ->xmlns:converter="clr-namespace:MyApp.Converters,assembly=MyApp"
  3. delimitatori di destra ->xmlns:converter="clr-namespace:MyApp.Converters;assembly=MyApp"

Come sulla lettura the reference prima di utilizzare qualcosa ?

Nota che il carattere che separa il CLR-namespace token dal suo valore è due punti (:), mentre il carattere che separa il assemblaggio token dal suo valore è un segno di uguale (=). Il carattere da utilizzare tra questi due token è un punto e virgola. Inoltre, non includere spazi bianchi in nessuna parte della dichiarazione.

+0

collegamento di riferimento è andato! –

+2

@WaldoAlvarez: Non è, è solo MSDN che usa un default stupido, se vedi "Questo argomento non è più disponibile", seleziona una versione precedente dal menu a discesa "Altre versioni". –

+0

ahh ok grazie, meglio fornire il collegamento diretto https://msdn.microsoft.com/en-us/library/ms747086(v=vs.100).aspx –

3

Vedo due possibili cause. Il primo è che hai sbagliato a digitare "assembly" come "aseembly" nella prima linea a stella. Cambiare l'ortografia potrebbe essere sufficiente. La seconda possibilità è che non hai aggiunto MyApp.dll ai tuoi riferimenti del progetto, che appaiono come questo

enter image description here

in Visual Studio.

11

Sto esplorando il motivo per cui questo sta accadendo, ma se il tuo convertitore è nell'assembly principale, rimuovendo l'assembly = dal tuo xmlns: il tag converters dovrebbe rimuovere quell'errore di compilazione.

2

Nella mia situazione, ho avuto lo stesso problema con xmlns:local="clr-namespace:<mydefaultnamespace>". Ho risolto questo cambiando l'ordine degli include. L'ho messo prima e tutto è stato risolto. Un comportamento strano, ma questa è stata la soluzione che ho trovato nella mia situazione.

0

Nel mio caso, l'assemblea che conteneva lo spazio dei nomi non era fisicamente lì.

Ho controllato i riferimenti dell'assembly che ha avuto l'errore di generazione e ho esaminato le proprietà dell'assembly referenziato in questione.

Ho navigato sul percorso e ho scoperto che l'assemblaggio era effettivamente mancante (che ho capito è stato il mio fare), dando origine all'errore fuorviante.

18

Un'altra possibile soluzione a questo problema è che non si sta utilizzando la stessa versione di .Net nel progetto e nella libreria.

+0

Questo è molto utile - ho avuto la mia sintassi corretta, ma ho dimenticato di impostare la versione del framework per il nuovo assembly a cui facevo riferimento. Grazie. –

+1

Sei un vero toccasana. – MetalMikester

+0

Puoi approfondire questo argomento? Maggiori dettagli –

3

Tutte le risposte sono corrette. E dopo aver provato tutti loro e non riesci a configurare il motivo per cui sta accadendo, tutto sembra a posto, per favore riavvia lo studio visivo.

Questo ha funzionato per me dopo aver perso quasi 1 ora. Ho trovato tutto ok, ma ho riavviato il VS con l'amministrazione.

+0

Ho letteralmente cercato di capire cosa stava succedendo per circa 3 ORE !! Il tuo suggerimento di riavviare VS ha fatto il trucco !! –

0

utilizzare il tag assemblare solo se si trova in un altro progetto. altri saggi usano solo il tag namespace da solo. Per me è stato risolto il problema

1

C'è un caso molto oscuro quando si verifica questo errore - se si utilizza Microsoft.mshtml.dll e si esegue l'aggiornamento a Windows 10 anniversary edition, o come risulta anche l'edizione Creator.

Anche se questo non è ciò che accade assicurati che la libreria contenente il componente che non può essere trovato possa essere completamente compilata. Cerca nella lista degli errori (non nella griglia ma nella Console di output) per qualsiasi indizio.

Nel mio caso stavo usando Microsoft.mshtml.dll come parte di un editor HTML e non è stato registrato in qualche modo (nel GAC).

Il seguente articolo spiega con screenshot:

https://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html#comment-form

Insomma ho dovuto correre un prompt dei comandi di Visual Studio (come amministratore) eseguire questi comandi:

cd C:\Windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a 
regasm Microsoft.mshtml.dll 

ho detto oscura :-) Il punto importante è leggere gli errori che potrebbero essere sepolti tra tutti i tuoi avvertimenti perché potrebbe esserci un indizio importante.

Ciò può essere particolarmente confuso se un aggiornamento del sistema operativo interrompe improvvisamente il progetto.

Problemi correlati