2009-08-31 15 views
6

Actualmente estoy trabajando en un proyecto de ASP.NET con varios desarrolladores que usan Subversion para la distribución de código, pero francamente está completamente desordenado en este momento. La persona que configuró el repositorio de Subversion ha incluido archivos de configuración específicos para su computadora, directorios bin \ * y otras cosas similares.¿Mejores prácticas para almacenar un sitio web ASP.NET en Subversion?

Yo, siendo el tipo que tiene que consultar este repositorio y hacer que funcione en mi computadora, estoy bastante frustrado por esto, ya que me tomó un tiempo ordenarlo todo para compilarlo en absoluto. Ahora estoy pensando en escribir un documento con las directrices de Subversion para enviarlo al líder técnico de mi empresa para que podamos estandarizar el proceso y evitar este tipo de problemas.

Lo que estoy buscando es información sobre las pautas. Aquí está el comienzo para ellos, y con suerte podemos hacer algo bueno con esto:

La estructura del archivo debe configurarse para tener las bibliotecas de terceros registradas fuera de los directorios de salida de compilación (ya que no serán incluido en el repositorio.) El nombre de este directorio debería ser "Bibliotecas".

No se deben incluir archivos específicos de la máquina en Subversion. Por lo tanto, solo se registra una plantilla de Web.config, que los desarrolladores adaptan para adaptarla a su máquina. Este comportamiento se incluye en Visual Studio 2010 de forma predeterminada y los archivos de configuración individuales (Web.Local.config) tienen automáticamente aplicada la plantilla (Web.config). Sin embargo, el archivo de configuración local aún no debería incluirse en Subversion, siempre que se aplique a una máquina específica.

Los archivos de solución y de proyecto no deben contener ninguna ruta de acceso absoluta.

Se debe configurar una lista de ignorar. Inicio con:

' 
*.user 
obj 
' 

Ejemplo estructura de archivos para un sitio web de ASP.NET 2.0 con una biblioteca de clases específicas para el sitio web y una biblioteca de terceros:

' 
/trunk/ 
    Libraries/ 
     ThirdParty.dll 
    MyClassLibrary/ 
     bin/ [Ignore] 
     obj/ [Ignore] 
     Properties/ 
      AssemblyInfo.cs 
     SomeClass.cs 
     MyClassLibrary.csproj 
      - Holds references to third-party libraries. For example: 
       ../Libraries/ThirdParty.dll 
    MyWebApplication/ 
     bin/ 
      ThirdParty.dll [Ignore; copied by build process] 
      ThirdParty.dll.refresh 
       - Contains "../Libraries/ThirdParty.dll" 
     Default.aspx 
     Default.aspx.cs 
     Web.config [Ignore] 
     Web.config.template 
    MySolution.sln 
     - Holds list of projects. 
     - Has reference information for projects. 
' 

Una alternativa al uso Web.config.template haría Incluya un archivo Local.config de Web.config, pero esto podría ser menos flexible.

Al utilizar un proyecto de aplicación web en lugar de un proyecto de sitio web, las referencias se almacenarán en el archivo de proyecto en lugar de archivos .refresco, por lo que se ignorará la carpeta/bin.

¿Alguien puede ver los errores en las sugerencias anteriores? ¿Algo falta? ¿Alguien tiene sugerencias para la lista de ignorar? Empecé con un par de entradas por ahora.

Respuesta

7

Creo que eres un buen paso en el camino. ¿Pero por qué no poner un ignorar en toda la carpeta bin en/MyWebApplication, en lugar de los archivos? Usted no agregaría su producción de compilación a la subversión, ¿verdad? Definitivamente lo consideraría una mala práctica.

También, si es posible, se puede agregar el archivo web.config para la subversión, pero en el elemento de referencia a un nuevo archivo con appsettings: por ejemplo

<appSettings file="local.config"> 

Luego tienen el archivo local.config ser ignorado por svn. Así es como siempre funciono.

Pero por supuesto eso solo funciona si todos los parámetros configurables están en appSettings (una de las razones por las que no me gusta el modelo de proveedor, porque todos los proveedores necesitan obtener cadenas de conexión de un elemento connectionString y no se pueden reconfigurar tomar una cadena de conexión de appsettings)

Editar: troethom me iluminó y señaló, que también puede anular los ajustes de configuración connectionString en un archivo separado

<connectionStrings configSource="ConnectionStrings.config"/>. 

Así que lo que me gustaría hacer es pla El archivo web.config actual se encuentra bajo control de subversión, pero deja que svn, ignore esos otros archivos que anulan la configuración localmente.

+0

Para proyectos web 2.0 referencias de ensamblado externos están determinados por el/bin/solos , entonces necesito (AFAIK) que los archivos .refresh estén en el directorio/bin /. Es posible hacer que SVN ignore bin/*. Dll, así que esto no debería ser un problema. Mi intención nunca fue incluir resultados de compilación en SVN, eso es exactamente lo que pretenden evitar estas directrices. De hecho, escribí mis directrices para importar un archivo "Local.config" inicialmente, pero dado que hay tantas secciones en un archivo de configuración, pensé que sería mejor tener una copia del archivo que el desarrollador puede configurar . – Blixt

+0

Ahhh - Olvidé esos proyectos de 2.0 "sitio web" sin un archivo de proyecto. Nunca me gustaron. Pero tiene una opción (la aplicación web se reintrodujo en VS2005 SP1). Si crea un "sitio web", no tiene ningún archivo de proyecto, y el directorio bin lo convierte en referencias, o puede crear una "aplicación web" donde las referencias están definidas por un archivo de proyecto, y luego puede ignorar todo el contenedor carpeta. Pero no tengo mucha experiencia en colocar un proyecto de "sitio web" en svn. – Pete

+0

Pete, también puede colocar sus cadenas de conexión en un archivo de configuración separado (a menos que siga usando .NET 1.1). Simplemente use ''. –

1

Debería agregar los archivos .refresh; no las DLL reales

El sistema de proyectos de Visual Studio envía una lista de los archivos que se deben agregar al control de origen a los proveedores de SCC. AnkhSVN es un proveedor Subversion SCC que utiliza esta información para sugerir agregar estos archivos (y no los otros archivos).

VisualSVN y otros clientes de Subversion que solo miran las extensiones de archivos no obtienen esta información de ASP.Net.

(Nota: si se quita el archivo .Refresh, Visual Studio agregará el archivo DLL en la lista de archivos que deben ser comprometido)

+0

Entonces, mi sugerencia anterior de utilizar archivos '.refresh' es la forma recomendada de incluir referencias de DLL en la carpeta' bin' de ASP.NET? – Blixt

Cuestiones relacionadas