Aracılığıyla paylaş


Çözüm derlemesini özelleştirme

MSBuild bir çözüm dosyası derlediğinde, önce bunu dahili olarak bir proje dosyasına çevirir ve sonra bunu derler. Oluşturulan proje dosyası before.{solutionname}.sln.targets , hedefleri tanımlamadan önce ve after.{solutionname}.sln.targets ve dizinlerine yüklenen $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter hedefler de dahil olmak üzere hedefleri içeri aktardıktan sonra içeri aktarır.

Örneğin, myCustomizedSolution.sln dosyasını oluşturduktan sonra aynı dizinde adlı bir dosya oluşturarak özel bir günlük iletisi yazmak için yeni bir hedef tanımlayabilirsiniz. Içeren MyCustomizedSolution.sln.targets

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

Çözüm derlemesi proje derlemelerinden ayrı olduğundan buradaki ayarlar proje derlemelerini etkilemez.

Önemli

Çözüm derlemesini bu şekilde özelleştirmek yalnızca MSBuild.exe ile komut satırı derlemelerine uygulanır. Visual Studio içindeki derlemeler için geçerli değildir. Bu nedenle, özelleştirmenin çözüm düzeyinde kullanılması önerilmez. Çözümdeki tüm projeleri özelleştirmenin daha iyi bir alternatifi, bu makalenin başka bir yerinde açıklandığı gibi çözüm klasöründeki Directory.Build.props ve Directory.build.targets dosyalarını kullanmaktır.

Aynı şekilde genişletmek istediğiniz birçok çözüm dosyanız varsa ancak klasöre yazmak $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ istemiyorsanız (genellikle yükseltilmiş izinler gerektirir), Directory.Solution.props ve Directory.Solution.targets dosyalarını oluşturabilir ve genişletmek istediğiniz çözüm dosyalarının üzerindeki kök yola yerleştirebilirsiniz. Directory.Solution.props , çözüm derlemesinin başında ve Directory.Solution.targets ise çözüm derlemesinin sonunda içeri aktarılır. Bir çözüm dosyası oluşturduğunuzda, Directory.Build.props ve Directory.Build.targets içeri aktarılmaz, bu nedenle bunun yerine Directory.Solution.props ve Directory.Solution.targets kullanmanız gerekir. Örtük olarak birbirlerini içeri aktarmaz.

Kök klasörde Directory.Solution.props veya Directory.Solution.targets varsa ancak bu klasörün altında bunları içeri aktarmak istemediğiniz bir çözümünüz varsa, daha önce after.{solutionname}.sln.targets before.{solutionname}.sln.targets bahsedilen çözüme özgü dosyaları kullanarak özellikleri $(ImportDirectorySolutionProps) ve $(ImportDirectorySolutionTargets) false değerini ayarlayabilirsiniz. Ya da özelliklerini $(DirectorySolutionPropsPath) kullanabilir ve $(DirectorySolutionTargetsPath) bu dosyalar için farklı bir konum belirtebilirsiniz. Çözümlerinizin belirli özellik değerleri gerektiren çeşitli alt kümeleriniz veya alt kümeler için ortak olan hedefleriniz varsa bu yararlı olabilir.