2012-06-14 16 views
13

He estado investigando desde hace un tiempo tratando de encontrar una razón por la siguiente sería que ocurren, pero no hay soluciones en StackOverflow o Google son capaces de ayudarme.Indefinido CLR espacio de nombres - ¿No ha encontrado

que tienen un control de usuario personalizado que está intentando hacer referencia a un espacio de nombres dentro del mismo proyecto:

xmlns:my="clr-namespace:ColorPicker" 

sin embargo cuando compilo me sale el siguiente error:

Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'ColorPicker' that is not included in the assembly.

Esto se traduce en que no ser capaz de construir mi proyecto o hacer referencia a otros controles personalizados en el XAML, la generación de estos tipos de errores:

The type 'my:ColorSelector' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

He intentado todas las soluciones dadas en estos mensajes:

adding a custom namespace to xaml

WPF xmlns: The 'clr-namespace' URI refers to a namespace that is not included in the assembly

The 'clr-namespace' URI refers to a namespace that is not included in the assembly

Undefined CLR namespace

Además, para ser claros, no estoy obtener cualquier otro error sobre otros archivos en este proyecto, por lo que no parece que podría ser el resultado de otros archivos no c ompiling

ACTUALIZACIÓN: Un proyecto de ejemplo que produce el error para mí puede ser descargado aquí: http://www.filefactory.com/file/28fbmhj3f4qj/n/ColorPicker_zip

+1

Difícil de decir de esta descripción. ¿Puedes compartir un pequeño proyecto de muestra que repros el error? –

+2

¿Está seguro de que ColorPicker tiene el espacio de nombres como 'ColorPicker', ha intentado agregar el; assembly = YourAssembly? –

+0

No tengo problemas para compartir el proyecto real. ¿Estás esperando un archivo o solo un montón de fuentes? Si el proyecto es real, ¿cuál es el método más rápido para publicar aquí? – flamebaud

Respuesta

6

Su first linked question tiene la respuesta. La respuesta es: debe compilar el ensamblado que contiene el espacio de nombres y las clases/controles a los que se hace referencia antes de poder hacer referencia a él en .xaml. Comenté tus declaraciones de espacios de nombres xaml, luego comenté los elementos xaml de esos espacios de nombres y luego comenté el código C# que se rompió como resultado de que esos elementos ya no se declaran. En otras palabras, seguí comentando hasta que pude construir con éxito. Una vez que se construyó el ensamblado, descomente las declaraciones del espacio de nombres xaml y luego los elementos. Esto dio un error sobre la necesidad de usar x: Name en lugar de Name en esos elementos, así que lo hice. Luego se descomentó el código C# y se compila.

+0

Muchas gracias @ xr280xr, este proceso resolvió mi solución, aunque parece un proceso increíblemente largo y molesto tener que pasar. ¿Sabes por qué tengo que hacerlo así? Es decir, ¿no debería Visual Studio ser lo suficientemente inteligente como para hacer esto por sí mismo? – flamebaud

+1

@flamebaud No sé cómo funciona VS, pero supongo que cuando hace referencia al espacio de nombres en el diseñador, carga el ensamblaje que lo contiene. Si aún no se ha construido el ensamblaje, sus cambios no estarán en él y no estarán disponibles para su XAML; estarás haciendo referencia a algo que aún no existe. Ahora bien, si intenta construir el ensamblaje para repararlo, no puede hacerlo porque su XAML roto con la referencia faltante se compila en el mismo ensamblaje. VS no es lo suficientemente inteligente como para saber excluir la referencia interrumpida para construir el resto del ensamblaje a fin de corregir la referencia interrumpida. – xr280xr

+1

Sería bueno si lo fuera y es un poco engañoso porque intellisense es lo suficientemente inteligente como para recoger sus cambios sin construir primero. Siempre que recuerdes construir tus cambios de código antes de agregarlos a XAML, generalmente no es una gran cosa. – xr280xr

1

xmlns:my="clr-namespace:ColorPicker;assembly=ColorPicker".

¡Esto funcionó para mí! ¡Es más rápido y menos molesto!

0

tuve que mover la mina a un diccionario de recursos externos. me fijo mi problema cambiando:

<UserControl.Resources> 
    <SHCL:GoodBadConverter x:Key="GoodBadConverter"/> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/StandardHelperClassLibrary;component/WPF/Dictionaries/WindowStylesDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

a

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/StandardHelperClassLibrary;component/WPF/Dictionaries/WindowStylesDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

donde se trasladó a uno de los diccionarios de recursos mencionados.

Cuestiones relacionadas