Dela via


Anpassa lösningsversioner

När MSBuild skapar en lösningsfil översätter den först filen internt till en projektfil och skapar sedan projektfilen. Den genererade projektfilen kan importera en före.<solutionname>.sln.targets-fil innan den definierar några mål och importera en efter.<solutionname>.sln.targets-fil efter att den har importerat målen.

Före- och efter-målfilerna installeras i katalogerna $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore och$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter.

Du kan till exempel definiera ett nytt mål för att skriva ett anpassat loggmeddelande efter att MyCustomizedSolution.sln kompileras genom att skapa följande fil med namnet efter.MyCustomizedSolution.sln.targets i samma katalog.

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

Lösningsversionen är separat från projektversionerna, så de här inställningarna påverkar inte projektversionerna.

Viktigt!

Anpassning av lösningen på detta sätt gäller endast kommandoradsbygg när man använder MSBuild.exe eller dotnet build, och gäller inte för byggande inuti Visual Studio. Därför är det bäst att inte placera anpassning på lösningsnivå. Ett bättre alternativ för att anpassa alla projekt i en lösning är att använda Filerna Directory.Build.props och Directory.Build.targets i lösningsmappen.

Att skriva till $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile mappen kräver vanligtvis utökade behörigheter. Om du har många lösningsfiler för att utöka på samma sätt, men du inte vill skriva till mappen SolutionFile , kan du skapa filerna Directory.Solution.props och Directory.Solution.targets och placera dem i rotsökvägen ovanför de lösningsfiler som du vill utöka. Directory.Solution.props importeras i början av lösningsversionen och Directory.Solution.targets importeras i slutet av lösningsversionen.

När du skapar en lösningsfil importeras inte Directory.Build.props och Directory.Build.targets , så du måste använda Directory.Solution.props och Directory.Solution.targets i stället. De två typerna av filer importerar inte implicit varandra.

När du har Directory.Solution.props eller Directory.Solution.targets-filer i en rotmapp, men du inte vill att en lösning under mappen ska importera filerna, kan du använda lösningens tidigare.<solutionname>.sln.targets-fil för att ange egenskaperna ImportDirectorySolutionProps och ImportDirectorySolutionTargets till false.

Eller så kan du använda $(DirectorySolutionPropsPath) egenskaperna och $(DirectorySolutionTargetsPath) för att ange en annan plats för dessa filer. Den här metoden kan vara till hjälp om delmängder av dina lösningar kräver vissa egenskapsvärden eller mål gemensamt.

Anmärkning

Lösningsversionen stöds med lösningsfilformatet .slnx i MSBuild 17.12 och senare. Både innan.<solutionname.slnx.targets> och innan.<solutionname>.sln.targets samt motsvarande efterfiler fungerar med MSBuild 17.14 och senare.

Mer information om anpassningsalternativ för versioner finns i Anpassa din version.