2010-06-18 12 views
5

Me gustaría adherirse a las normas de formato de StyleCop hacer buen código y clara, pero recientemente he tenido un problema con uno de sus advertencias:Uso de directivas, espacio de nombres y referencia de conjunto: todo mezclado con StyleCop.

Todos utilizando directivas deben ser colocados interior del espacio de nombres.

Mi problema es que tengo que utilizan directivas, una referencia de ensamblado (por burlarse de la eliminación de archivos), y un espacio de nombres para hacer malabares en una de mis clases de prueba:

using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
[assembly: MoledType(typeof(System.IO.File))] 

namespace MyNamespace 
{ 
//Some Code 
} 

Lo anterior permite pruebas sean funciona bien, pero StyleCop se queja de que las directivas de uso no están dentro del espacio de nombres.

Al poner los usos dentro del espacio de nombres aparece el error de que "MoledType" no se reconoce.

Poner tanto los usings y la referencia de ensamblado en el interior del espacio de nombres da el error

'montaje' no es un atributo de ubicación válida de esta declaración. Las ubicaciones de atributo válidas para esta declaración son 'tipo'. Todos los atributos en este bloque serán ignorados.

Parece que he probado todos los diseños que puedo, pero fue en vano, o la solución no se compilará, ¡la burla no funcionará o StyleCop se quejará!

¿Alguien sabe una manera de resolver esto para que todo esté feliz? ¿O voy a tener que ignorar la advertencia de StyleCop en este caso?

+1

Si asigna el nombre completo para MoledType y mueve solo los nombres a la tabla de nombres, ¿todavía está en coma? –

+0

¡Sí, eso lo solucionó! Recibí este comentario justo después de enviar la respuesta a mi propia pregunta jaja!Gracias aunque Leom, muy apreciado =) – Jack

Respuesta

10

¡Resuelto dos minutos después!

Sólo tenía que poner la ruta completa de "MoledType" en la referencia de montaje - lo que significa que podría dejarlo fuera del espacio de nombres con las directivas que utilizan el interior de esta manera:

[assembly: Microsoft.Moles.Framework.MoledType(typeof(System.IO.File))] 
namespace MyNamespace 
{ 
using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

// Some Code... 
} 

Esperemos encontrar someone'll esto es útil!

+2

Al igual que mi comentario dijo :) –

+0

Jaja no se puede enseñar el tiempo de esa manera =) – Jack

+0

¡Buen trabajo, este estaba arruinando mi día a lo grande! Acabo de empezar a usar StyleCop y todavía estoy ajustándome a lo obstinado que es sobre estas cosas –

5

El patrón típico sería poner todos los atributos de nivel de ensamblado dentro del archivo AssemblyInfo.cs. Por lo general, este archivo no tiene ningún elemento de espacio de nombres y todos los atributos de ensamblaje se definen con nombres completos.

1

De acuerdo con Jason, debe poner esto en AssemblyInfo.cs en su lugar (Proyecto -> Propiedades).

¡Pero! Tenga cuidado con lo que coloca en el archivo AssemblyInfo.cs. Digamos que usted quiere utilizar:

[assembly: InternalsVisibleTo("ClassA")] 

Si pones esto en AssemblyInfo.cs, todas las clases internas del proyecto será visible para claseA. Esto no siempre es querido.

Cuestiones relacionadas