permita que msbuild genere nombres de archivos de destino a partir de nombres de archivos de origen

Estoy tratando de descubrir cómo usar MSBuild para crear un conjunto de dlls a partir de un conjunto de archivos de configuración. Es decir, tengo algunos archivos de configuración

Policy.1.1.mylib.config
Policy.1.2.mylib.config
...
Policy.1.x.mylib.config

y en un objetivo de msbuild, me gustaría llamar a la tarea AL (enlazador de ensamblaje) con la lista de estos archivos, con el valor del parámetro Outputfile (Policy.1.i.mylib.dll para cada i = 1, ..., x) generado dinámicamente a partir del parámetro del archivo de configuración correspondiente. (Todos los demás parámetros los conozco explícitamente, por lo que puedo ingresarlos directamente).

No tengo mucha experiencia con MSBuild. Descubrí cómo ejecutar la tarea AL en un destino posterior a la compilación para un archivo, y cómo obtener la lista de nombres de archivos de configuración en una lista y creo que podría recorrer esa lista usando el procesamiento por lotes, pero yo Estoy atascado cuando se trata de generar el nombre del archivo de destino a partir del nombre del archivo de origen.

(Nota: esto es msbuild 3.5, por lo que aparentemente no hay manipulación de cadenas como parece ser en 4.0. Además, instalar bibliotecas adicionales desde la red no es una opción para mí).

¿Alguna sugerencia? Tal vez el enfoque como tal no sea adecuado para MSBuild y simplemente no veo la forma correcta de hacerlo. Los archivos de configuración se generan programáticamente, ¿tal vez debería, además de estos, crear un conjunto de archivos para procesar, cada uno con los nombres de entrada y salida para todos y hacer que MSBuild los lea?

preguntado el 12 de junio de 12 a las 14:06

2 Respuestas

Si solo desea crear una lista de nombres de archivos de ensamblaje, créelos en un grupo de elementos agrupando los nombres de los archivos de configuración:

<ItemGroup>
    <ConfigFiles Include="Path\to\Policy.*.config" />
    <Assemblies Include="%(ConfigFiles.Filename).dll" />
</ItemGroup>

La Assemblies grupo de artículos contendrá

Policy.1.1.mylib.dll
Policy.1.2.mylib.dll
...
Policy.1.x.mylib.dll

Respondido el 12 de junio de 12 a las 19:06

Agruparías las configuraciones con un Grupo de artículos y eso te daría acceso a metadatos para bucles similares a foreach y recrear un nombre dll, por ejemplo <Task Input="%(Configs.FullName)" Output="%(Configs.RelativeDir)\%(Configs.Filename).dll" />

Respondido el 12 de junio de 12 a las 18:06

Gracias, pude acceder a %(Config.Filename) dentro de mi Tarea. El 'Nombre completo' no funcionó, sin embargo, usé "% (Configs.identity)" en su lugar, una expresión que encontré solo por accidente. Busqué durante bastante tiempo algo como esto, ¿hay alguna referencia en algún lugar cuyos atributos (como ".Nombre de archivo") estén disponibles para este tipo de elemento de lista? - Thomas

Sí, el enlace de metadatos en la respuesta es una lista de atributos de metadatos de elementos conocidos. - Ilya Kozhevnikov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.