Quiero comenzar a usar Microsoft.Net.Compilers para simplificar el trabajo con nuestro servidor de compilación. Sin embargo, solo pude hacer que funcionara a nivel de proyecto , agregando el paquete a todos los proyectos.
Esto es problemático porque el paquete tendría que agregarse a cada nuevo proyecto creado. Esto podría conducir a un caso en el que el código se compila en la máquina del desarrollador (que tiene el compilador más reciente), pero fallaría en el servidor de compilación. Tenemos muchos proyectos (más de 100), por lo que esto es relativamente común.
¿Hay alguna forma de usar Microsoft.Net.Compilers a nivel de solución?
Si no hay una forma compatible, ¿hay alguna herramienta de línea de comandos que no tenga que instalar en el servidor de compilación? Alternativamente, ¿no es este un uso previsto de estas herramientas?
Si en VS 2017 (actualización 1, números de compilación >= 15.1.*), puede usar el mecanismo PackageReference integrado de MSBuild en lugar de packages.config que anteriormente solo estaba disponible para los tipos de proyecto .net core y .net estándar. Consulte la documentación de PackageReference , así como la publicación de blog de NuGet que anuncia la compatibilidad, especialmente la sección "¿Qué pasa con otros tipos de proyectos que no son .NET Core?".
La idea es pasar de instalar un paquete y agregarlo a packages.config para restaurarlo a solo especificar elementos de MSBuild en el archivo csproj. Esto se puede configurar para nuevos proyectos en VS:
(la animación es de la publicación de blog de NuGet vinculada anteriormente)
Una característica nueva de MSBuild 15 es que admite la inclusión automática de archivos en la jerarquía de directorios que tienen nombres especiales. Esos son Directory.Build.props y Directory.Build.targets que se incluirán antes (props) y después (targets) del contenido del archivo de su proyecto (hay un error con la versión .targets para proyectos de objetivos múltiples para los cuales se trata de una solución para ser lanzado).
Si crea un archivo Directory.Build.props con el siguiente contenido en el nivel de solución, todos los proyectos en la jerarquía de directorios debajo heredarán su contenido y puede forzar una dependencia de NuGet en cada proyecto:
<Project> <ItemGroup> <PackageReference Include="Microsoft.Net.Compilers" Version="2.1.0"/> </ItemGroup> </Project>Haga clic con el botón derecho en su solución > Administrar paquetes NuGet para la solución...
... O:
Herramientas > Administrador de paquetes de biblioteca > Administrar paquetes NuGet para la solución...
Luego agréguelo a todos los proyectos buscando su paquete, luego marcando la casilla de verificación superior y haciendo clic en instalar.
Fuente: https://stackoverflow.com/a/8653312/7007466
Crea una plantilla imitando la original para cada tipo de proyecto que necesites (Consola, Biblioteca, etc...) y agregándole el paquete.
Nota: Use solo caracteres de identificación válidos al nombrar un proyecto que será la fuente de una plantilla. Una plantilla exportada de un proyecto cuyo nombre contiene caracteres no válidos puede provocar errores de compilación en futuros proyectos basados en la plantilla.
Si tiene instalado el SDK de Visual Studio, puede empaquetar la plantilla terminada en un archivo .vsix para su implementación mediante la plantilla del proyecto VSIX.
Fuente: https://msdn.microsoft.com/en-us/library/xkh1wxd8.aspx
Si alguien tiene una manera más fácil que crear plantillas, con gusto la tomaré.