2011-07-21 19 views
61

He leído sobre esta técnica: http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspxcompartido AssemblyInfo de versiones uniforme a través de la solución

Básicamente que significa crear un SharedAssemblyInfo.cs con información de versión sobre el montaje, y la adición de este archivo como enlace a todos los proyectos de la solución, por lo que el archivo real reside solo en 1 ubicación en el disco.

Mi pregunta tiene que ver con 2 escenarios:

  1. solución que no utilice este mecanismo existente: ¿Hay una manera de agregar fácilmente la ShareAssemblyInfo a todos los proyectos? (digamos que tengo una solución con 50 proyectos).

  2. Al crear un proyecto nuevo, de forma predeterminada se crea un nuevo AssemblyInfo.cs. Sin embargo, también me gustaría vincular automáticamente a SharedAssemblyInfo.

¿Hay alguna solución para esto? ¿Cuál es la práctica común?

+0

práctica común es crear información ensamblaje único – VMAtm

Respuesta

45

El primer punto podría resolverse con un simple editor de texto que podría manejar varios archivos a la vez y buscar/reemplazar. Sólo tiene que abrir toda su csproj en ella y reemplazar cadena <Compile Include="Properties\AssemblyInfo.cs" /> con

<Compile Include="..\SharedAssemblyInfo.cs"> 
    <Link>Properties\SharedAssemblyInfo.cs</Link> 
</Compile> 

Alternativamente se podría escribir una utilidad de esa manera:

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories); 
foreach (var f in files) { 
    string contents = File.ReadAllText(f); 
    string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :) 
    File.WriteAllText(f, contents); 
} 

En cuanto a la segunda pregunta ... Se puede echar un vistazo a Visual Studio custom project templates, pero no estoy seguro de que valga la pena el esfuerzo. Debería realizar una prueba de escritura IMO que verifique esto en su lugar. Será mucho más simple y el resultado es casi el mismo.

UPD: Acerca de las pruebas de escritura para verificar los archivos de solución/proyecto en comparación con algunas reglas personalizadas. Básicamente, el formato sln/csproj es lo suficientemente simple como para analizarse sin muchos esfuerzos. Entonces, si desea tener SharedAssemblyInfo.cs vinculado en cada proyecto, simplemente analice los csproj y verifique eso. Luego, coloque el verificador en su servidor de compilación y ejecútelo en cada compilación. Tenemos dicho sistema funcionando actualmente y cuesta alrededor de dos días escribirlo, pero nos ahorró muchos más (tenemos reglas más sofisticadas y proyectos de soluciones múltiples, por lo que valió la pena el esfuerzo).

No voy a escribir acerca de esta verificación en detalle aquí ahora (no es tan corto), pero voy a escribir una publicación en el blog pronto, probablemente hasta el final de esta semana. Por lo tanto, si usted está interesado - sólo echa my blog pronto :)

UPD:Here que es.

+0

# 1 - Estoy de acuerdo esto se puede hacer con un editor de texto. Me preguntaba si VS lo soporta de alguna manera. (Por cierto, ¿es EditPad Pro mejor que Notepad ++ en tu opinión?) # 2 - ¿Qué quieres decir con escribir una prueba que verifique esto en su lugar? –

+0

Sí, EditPad Pro es mejor IMO. Al menos ciertamente fue mejor cuando revisé N ++ la última vez. Tampoco es freeware, por lo que debe pensar que lo necesita. –

+0

He actualizado la respuesta con algunos detalles sobre su segundo punto. –

46

Es posible vincular a un archivo de información de conjunto compartido en VS 2010. Ashish Jain tiene una buena publicación en el blog al respecto: Sharing assembly version across projects in a solution.

Después de crear el archivo de información de ensamblado compartido en el nivel de la solución, sus instrucciones para vincular a ella de un proyecto son:

  1. Haga clic derecho sobre el proyecto, en el que desea añadir el Compartidos archivo de ensamblaje, y seleccione Agregar -> Artículo existente ...

  2. Seleccione el archivo "SharedAssemblyInfo.cs" de la carpeta de la solución.

  3. En lugar de agregar, haga clic en la flecha situada junto al agregar y haga clic en “Agregar Enlace”

  4. Arrastre hacia abajo el archivo vinculado añadido junto AssemblyInfo.cs en la misma carpeta .

  5. Repita los pasos 1 - 4 para todos los proyectos para los que desee agregar archivos de ensamblaje compartidos.

He intentado esto y funciona.

+3

¡Gracias por explicarme sobre la pequeña flecha que había pasado por alto! –

+8

No es necesario repetir los pasos 1-4. Podrías arrastrar el archivo vinculado desde tu primer proyecto al siguiente. Esto copiará el archivo de enlace al próximo proyecto. – ristaloff

+1

También puede hacerlo reemplazando texto en todos los archivos * .csproj. Actualice un proyecto y compare el resultado en un archivo csproj nuevo y antiguo, y aplique en todos los demás proyectos en su solución;) – Ludwo

0

He creado una aplicación para incrementar la versión del archivo automáticamente.

  1. Descargar Applicaiton
  2. añadir la siguiente línea a pre-construcción de línea de comandos del evento

C: \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ properties \ AssemblyInfo.cs Generar el proyecto Para que todo sea sencillo, la aplicación solo envía mensajes si hay un error, para confirmar que funcionó bien, deberá verificar la versión del archivo en 'Información de la Asamblea'

Nota: Deberá reubicarse y la solución en Visual Studio para el botón 'Información de ensamblaje' para rellenar los campos; sin embargo, su archivo de salida tendrá la versión actualizada.

Para sugerencias y peticiones por favor un correo electrónico a [email protected]

Cuestiones relacionadas