Compartir a través de


Personalización de compilaciones de soluciones

Cuando MSBuild compila un archivo de solución, primero traduce el archivo internamente en un archivo de proyecto y, a continuación, compila ese archivo de proyecto. El archivo de proyecto generado puede importar un antes.<solutionname>.sln.targets archivo antes de definir los destinos e importar después.<solutionname>.sln.targets después de importar los destinos.

Los archivos de objetivos antes y después se instalan en los directorios $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore y $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter.

Por ejemplo, podría definir un nuevo destino para escribir un mensaje de registro personalizado después de MyCustomizedSolution.sln compilaciones, creando el siguiente archivo denominado después. MyCustomizedSolution.sln.targets en el mismo directorio.

<Project>
 <Target Name="EmitCustomMessage" AfterTargets="Build">
   <Message Importance="High" Text="The solution has completed the Build target" />
 </Target>
</Project>

La compilación de la solución es independiente de las compilaciones del proyecto, por lo que esta configuración no afecta a las compilaciones del proyecto.

Importante

La personalización de las compilaciones de la solución de esta manera solo se aplica a las compilaciones de línea de comandos mediante MSBuild.exe o dotnet buildy no se aplica a las compilaciones dentro de Visual Studio. Por lo tanto, es mejor no colocar la personalización en el nivel de solución. Una alternativa mejor para personalizar todos los proyectos de una solución es usar archivos Directory.Build.props y Directory.Build.targets en la carpeta de la solución.

La escritura en la $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile carpeta normalmente requiere permisos elevados. Si tiene muchos archivos de solución para ampliar de la misma manera, pero no desea escribir en la carpeta SolutionFile , puede crear los archivos Directory.Solution.props y Directory.Solution.targets y colocarlos en la ruta de acceso raíz encima de los archivos de solución que desea extender. Directory.Solution.props se importa al principio de la compilación de la solución y Directory.Solution.targets se importa al final de la compilación de la solución.

Al compilar un archivo de solución, Directory.Build.props y Directory.Build.targets no se importan, por lo que debe usar Directory.Solution.props y Directory.Solution.targets en su lugar. Los dos tipos de archivos no se importan implícitamente entre sí.

Cuando tenga archivos Directory.Solution.props o Directory.Solution.targets en una carpeta raíz, pero no desea que una solución de esa carpeta importe esos archivos, puede usar antes la solución .<solutionname>.sln.targets archivo para establecer las propiedades ImportDirectorySolutionProps y ImportDirectorySolutionTargets en false.

O bien, puede usar las $(DirectorySolutionPropsPath) propiedades y $(DirectorySolutionTargetsPath) para especificar una ubicación diferente para esos archivos. Este enfoque puede ser útil si los subconjuntos de las soluciones requieren determinados valores de propiedad o destinos en común.

Nota:

La compilación de la solución se admite con el .slnx formato de archivo de solución en MSBuild 17.12 y versiones posteriores. Ambos antes.<solutionname.slnx.targets> y antes.<solutionname>.sln.targets, y los archivos después correspondientes, funcionan con MSBuild 17.14 y versiones posteriores.

Para obtener más información sobre las opciones de personalización de compilación, consulte Personalización de la compilación.