Estamos utilizando .NET 3.5 con VS2008. Tengo una solución con ~ 20 proyectos en ella, y esa cantidad crecerá con el tiempo a medida que la aplicación crezca y agregue nuevos módulos. Hoy necesitaba establecer una propiedad en cada proyecto. Tuve que editar cada archivo csproj añadir lo siguiente:MSBuild - Establecer propiedades para la solución
<Target Name="BeforeBuild">
<CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' "
Value="$(SolutionDir)Tools\MSBuild">
<Output TaskParameter="Value" PropertyName="AlToolPath" />
</CreateProperty>
</Target>
Esto es para permitir que los proyectos para encontrar el enlazador de montaje (al.exe) que se almacena en el repositorio de origen de manera que la construcción es agnóstico máquina (puede verificar y construir en cualquier máquina con .NET sin tener que instalar el SDK). La solución está construida en la línea de comandos usando MSBuild por los desarrolladores, instale archivos por lotes, CCNet, etc.
De todos modos, busqué una forma mejor de hacerlo (es decir, algo así como propiedades de nivel de solución) pero no pude encontrar ninguna. Sé que es posible establecer el valor de la propiedad en la línea de comandos de MSBuild, pero eso no se adapta bien a mí, ya que todas las líneas de comando existentes y futuras tendrían que incluirlo. También pensé en llamar a un objetivo anterior en el primer proyecto construido para usar una tarea personalizada para establecer una variable de entorno y un objetivo posterior en el último proyecto para eliminarlo, pero parecía más pesado y frágil que simplemente editar todos los archivos de proyecto individualmente. .
Háganme saber si ha hecho algo como esto o conozca una forma de establecer una propiedad una vez por solución que pueda ser utilizada por varios proyectos (incluyendo .NET 4/VS2010 con el que no tengo experiencia). Recuerde que estamos utilizando MSBuild para construir el archivo sln, no proyectos individuales.
Me gusta esta solución, pero aún significa que los archivos del proyecto deben editarse al menos una vez. – Mafuba
@Mafuba He automatizado esto usando NuGet. –
fyi utilizando VS 2017 si un archivo de props compartido se llama 'Directory.Build.props', se importará automáticamente a todos los proyectos en la jerarquía del directorio. –