que - ¿Cuál es la mejor manera de cambiar el nombre de un espacio de nombre en una aplicación c#grande?
un espacio de nombres no puede contener directamente miembros como campos o métodos (5)
En primer lugar, probaría la opción Refactor->Rename
. Pero como se menciona en el comentario de otras respuestas, no funciona tan bien (o no he encontrado cómo hacerlo funcionar). Por lo tanto, prefiero utilizar el siguiente escenario, especialmente si desea agregar algún espacio de nombres adicional.
1) Cambie el nombre de su espacio de nombres raíz ( WidgetCompany
) a algo como NAMESPACE_TO_BE_REPLACED
usando Refactor-Rename
2) Reemplace NAMESPACE_TO_BE_REPLACED
con su espacio de nombre final ( NewCompany.WidgetSoftware
) usando el diálogo find-n-replace
Y no olvide cambiar el nombre de proyectos, espacios de nombres predeterminados, etc.
Primero, un poco de fondo.
Actualmente, los espacios de nombres y los ensamblados en nuestra base de código (~ 60 ensamblajes, miles de clases) se parecen a
WidgetCompany.Department.Something
Ahora nos hemos separado de manera que estamos vendiendo el software que maneja una WidgetCompany, por lo que nos gustaría cambiar el nombre de los espacios de nombres y ensamblajes
NewCompany.Something
En circunstancias normales, probablemente solo me quedaré con el antiguo espacio de nombres, pero el problema es que nuestros clientes no quieren ver el nombre de uno de sus competidores en ninguna parte de la aplicación. En el caso de que vean un rastro de pila, propiedades de ensamblaje, etc., no debería aparecer. No está destinado a ocultar a nuestros asociados o hacer algo siniestro, solo debemos asegurarnos de que las personas sepan que somos una entidad separada, una administración separada, y que no necesitan preocuparse por la información compartida, etc.
Ahora la pregunta. ¿Cuál es la mejor manera de realizar este tipo de cambio de nombre abarcando todo? Lo siguiente necesitaría cambiar:
- Espacio de nombre para (casi) cada clase en la aplicación
- Cada declaración que
using
en la aplicación que hace referencia a los nombres antiguos - Estructura de carpetas para cada proyecto
- Referencias entre proyectos que dependen de una estructura de carpetas modificada
- .Sln archivos que hacen referencia a la estructura de carpetas modificadas
- Cualquier referencia a esas clases que están completamente calificadas (deben ser pocas y distantes)
- Cualquier referencia a esas clases en archivos de configuración xml (secciones de configuración, etc.)
- AssemblyInfo.cs archivos para cada ensamblaje
- AssemblyName en cada archivo .csproj
¿Estoy atrapado con la estrategia de buscar, reemplazar, rezar o hay algo mejor?
Haga clic con el botón derecho en su espacio de nombres actual y seleccione Refactorizar -> Cambiar nombre y cambie el nombre en la ventana emergente que aparece después de un tiempo. Ingrese su nuevo nombre y haga clic en Aceptar.
Si tiene varias profundidades para su espacio de nombres, entonces Visual Studio no le permitirá escribir un punto. Sin embargo, si copia y pega un punto, a pesar de una advertencia, hará el negocio.
ReSharper. Obtenga la versión 5.1 de JetBrains de forma gratuita durante 30 días (tiempo más que suficiente para hacer su cambio de nombre). Coloque el cursor sobre el espacio de nombre que desea cambiar y presione Ctrl-R dos veces (ReSharper Rename). Funcionará con un espacio de nombres de cualquier nivel profundo y convertirá el uso de ese espacio de nombres al nuevo. Sin embargo, deberá cambiar cada espacio de nombre único en su solución (a menos que vaya con Buscar / Reemplazar)
Si tiene ReSharper:
Haga clic derecho en el proyecto, Propiedades . Cambie el espacio de nombre predeterminado al espacio de nombre deseado.
Haga clic derecho en proyecto, Refactorizar -> Ajustar espacio de nombres para actualizar todos los espacios de nombres para usar el espacio de nombres predeterminado
Entonces solo deja que haga su magia.
- Abra una clase aleatoria en [WidgetCompany.Department.Something]
- Editar-> Buscar y reemplazar-> Reemplazar en archivos
- Escriba "WidgetCompany.Department.Something" en el área FindWhat
- Escriba "NewCompany.Something" en Reemplazar con área
- Seleccione Proyecto actual en Buscar en el área.
- Reemplaza todo