Hedefleri ve görevleri yapılandırma
Seçilen MSBuild görevleri, geliştirme bilgisayarı hedef ortamı desteklediğinde hedefledikleri ortamda çalışacak şekilde ayarlanabilir. Örneğin, 32 bit Windows mimarisini hedefleyen bir uygulama oluşturmak için 64 bit Windows bilgisayar kullandığınızda, seçili görevler 32 bit işlemde çalıştırılır.
Not
Derleme görevi Visual C# veya Visual Basic gibi bir .NET dilinde yazılmışsa ve yerel kaynakları veya araçları kullanmıyorsa, uyarlama olmadan herhangi bir hedef bağlamda çalışır.
UsingTask öznitelikleri ve görev parametreleri
Aşağıdaki UsingTask
öznitelikler, belirli bir derleme işlemindeki bir görevin tüm işlemlerini etkiler:
Runtime
Özniteliği varsa, ortak dil çalışma zamanı (CLR) sürümünü ayarlar ve şu değerlerden herhangi birini alabilir:CLR2
,CLR4
,CurrentRuntime
veya*
(herhangi bir çalışma zamanı).Architecture
Özniteliği varsa, platformu ve bitliği ayarlar ve şu değerlerden herhangi birini alabilir:x86
,x64
,CurrentArchitecture
veya*
(herhangi bir mimari).TaskFactory
özniteliği varsa, görev örneğini oluşturan ve çalıştıran görev fabrikasını ayarlar ve yalnızca değeriniTaskHostFactory
alır. Daha fazla bilgi için bu belgenin devamında yer alan Görev fabrikaları bölümüne bakın.
<UsingTask TaskName="SimpleTask"
Runtime="CLR2"
Architecture="x86"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v3.5.dll" />
Tek bir görev çağrısının MSBuildRuntime
hedef bağlamını ayarlamak için ve MSBuildArchitecture
parametrelerini de kullanabilirsiniz.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
</Target>
</Project>
MSBuild bir görevi çalıştırmadan önce, aynı hedef bağlama sahip bir eşleştirme UsingTask
arar. içinde belirtilen UsingTask
ancak karşılık gelen görevde olmayan parametreler eşleştirilmiş olarak kabul edilir. Görevde belirtilen ancak karşılık gelen UsingTask
parametrelerle eşleşmediği de kabul edilir. Veya görevinde parametre değerleri belirtilmezse UsingTask
, değerler varsayılan olarak *
(herhangi bir parametre) olur.
Uyarı
Birden UsingTask
fazla varsa ve tümü eşleşen TaskName
, Runtime
ve Architecture
özniteliklerine sahipse, değerlendirilecek ilk değer diğerlerinin yerini alır. Bu, ve Target
öğelerinin Property
davranışından farklıdır.
Görevde parametreler ayarlanırsa, MSBuild bu parametrelerle eşleşen veya en azından bunlarla çakışmayan bir UsingTask
bulmaya çalışır. Aynı görevin hedef bağlamını birden UsingTask
fazla belirtebilirsiniz. Örneğin, farklı hedef ortamlar için farklı yürütülebilir dosyaları olan bir görev şuna benzeyebilir:
<UsingTask TaskName="MyTool"
Runtime="CLR2"
Architecture="x86"
AssemblyFile="$(MyToolsPath)\MyTool.v2.0.dll" />
<UsingTask TaskName="MyTool"
Runtime="CLR4"
Architecture="x86"
AssemblyFile="$(MyToolsPath)\MyTool.4.0.dll" />
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<MyTool MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
</Target>
</Project>
Varsayılan UsingTasks geçersiz kılma
VARSAYıLAN olarak, MSBuild UsingTask'i "ilk kazanan" olarak işler. 17.2'den başlayarak, MSBuild parametresi aracılığıyla bu davranışı geçersiz kılmayı Override
destekler. parametresi Override
ayarlanmış true
bir UsingTask, aynı TaskName'in diğer UsingTask'lerinden önceliklidir.
<UsingTask TaskName="MyTool"
Runtime="CLR4"
Architecture="x86"
Override="true"
AssemblyFile="$(MyToolsPath)\MyTool.4.0.dll" />
Uyarı
Bu işlem görev başına yalnızca bir kez yapılabilir. Aynı görev için birden çok geçersiz kılma eklemeye çalışan derlemeler MSBuild hatası MSB4275
alır.
Görev fabrikaları
Aşağıdaki tabloda MSBuild yüklemesi tarafından sağlanan görev fabrikaları gösterilmektedir:
Görev fabrikası | Açıklama |
---|---|
AssemblyTaskFactory |
Bu varsayılan değerdir. Görevi devam eden bir şekilde çalıştırır. |
TaskHostFactory |
Görevi işlem dışı çalıştırır. |
RoslynCodeTaskFactory |
C# veya Visual Basic ile yazılan ve .NET Standard'ı hedefleyen satır içi görevler için; hem hem dotnet build de msbuild.exe ile çalışır. |
CodeTaskFactory |
C# veya Visual Basic'te yazılan ve .NET Framework'e yönelik satır içi görevler için; yalnızca ile msbuild.exe çalışır. |
Görev fabrikası mekanizması genişletilebilir olduğundan, üçüncü taraflar tarafından oluşturulanları da kullanabilir veya kendi mekanizmanızı oluşturabilirsiniz. Satır içi görevler yazmak için başka bir dili desteklemek, oluşturmanın bir nedeni olabilir.
TaskHostFactory
Bir görevi çalıştırmadan önce MSBuild, görevin geçerli yazılım bağlamında çalıştırılacak şekilde atanıp atanmadığını denetler. Görev bu kadar belirlenmişse, MSBuild bunu AssemblyTaskFactory
geçerli işlemde çalıştıran öğesine geçirir; aksi takdirde, MSBuild görevi TaskHostFactory
hedef bağlamla eşleşen bir işlemde çalıştıran öğesine geçirir. Geçerli bağlam ve hedef bağlam eşleşse bile, olarak ayarlayarak TaskFactory
bir görevi işlem dışı (yalıtım, güvenlik veya diğer nedenlerle) çalıştırmaya TaskHostFactory
zorlayabilirsiniz.
<UsingTask TaskName="MisbehavingTask"
TaskFactory="TaskHostFactory"
AssemblyFile="$(MSBuildToolsPath)\MyTasks.dll">
</UsingTask>
TaskHostFactory
Açıkça belirtildiğinde, görevi çalıştıran işlem kısa ömürlüdür. Bu, işletim sisteminin yürütüldikten hemen sonra görevle ilgili tüm kaynakları temizlemesine olanak tanır. Bu nedenle, bir derlemeden sonra görev derlemesini güncelleştirirken kullanılan dosya içi hatalardan kaçınmak için, kullanımlarıyla aynı derleme işleminde yerleşik görevlere başvururken belirtin TaskHostFactory
.
RoslynCodeTaskFactory
, RoslynCodeTaskFactory
proje dosyasındaki bir görev için hemen kullanmak üzere C# veya Visual Basic kodu yazabileceğiniz bir mekanizma sağlar. Kod, aynı derlemede yürütebileceğiniz bir görev oluşturmak için derleme işlemi sırasında derlenmiştir. Yazdığınız kod .NET Standard'ı hedeflediğinden dotnet build
, MSBuild'in .NET Core (ve .NET 5 ve üzeri) sürümünün yanı sıra msbuild.exe
.NET Framework kullanan sürümünü de kullanır. RoslynCodeTaskFactory
MSBuild mantığında yapılması biraz zor olan ancak ayrı bir proje oluşturacak kadar karmaşık olmayan özelleştirmeler için en iyisidir. Bkz . RoslynCodeTaskFactory ile BIR MSBuild satır içi görevi oluşturma.
Codetaskfactory
CodeTaskFactory
, MSBuild'in RoslynCodeTaskFactory
.NET Framework sürümüyle sınırlı olan eski bir sürümüdür. Bkz . MSBuild satır içi görevleri. Bu görev fabrikası desteklenir, ancak daha geniş uygulanabilirlik için daha yeni kod kullanılmalıdır RoslynCodeTaskFactory
.
Hayalet görev parametreleri
Diğer tüm görev parametreleri MSBuildRuntime
gibi ve MSBuildArchitecture
derleme özelliklerinden ayarlanabilir.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<FrameworkVersion>3.0</FrameworkVersion>
</PropertyGroup>
<Target Name="MyTarget">
<SimpleTask MSBuildRuntime="$(FrameworkVerion)" MSBuildArchitecture= "x86"/>
</Target>
</Project>
Diğer görev parametrelerinin MSBuildRuntime
aksine ve MSBuildArchitecture
görevin kendisi için belirgin değildir. Çalıştığı bağlamı tanıyan bir görev yazmak için bağlamı .NET Framework'e çağırarak test etmeniz veya diğer görev parametreleri aracılığıyla bağlam bilgilerini geçirmek için derleme özelliklerini kullanmanız gerekir.
Not
UsingTask
öznitelikleri araç kümesinden ve ortam özelliklerinden ayarlanabilir.
MSBuildRuntime
ve MSBuildArchitecture
parametreleri, hedef bağlamı ayarlamak için en esnek yolu sağlar, ancak kapsamı en sınırlı olan yolu da sağlar. Bir yandan, görev örneğinde ayarlandığı ve görev çalışmak üzere olana kadar değerlendirilmedikleri için, değerlerini hem değerlendirme zamanında hem de derleme zamanında kullanılabilen özelliklerin tam kapsamından türetebilirler. Öte yandan, bu parametreler yalnızca belirli bir hedefteki görevin belirli bir örneğine uygulanır.
Not
Görev parametreleri, görev konağı bağlamında değil üst düğüm bağlamında değerlendirilir. Çalışma zamanına veya mimariye bağımlı ortam değişkenleri (Program Dosyaları konumu gibi) üst düğümle eşleşen değeri değerlendirir. Ancak, aynı ortam değişkeni doğrudan görev tarafından okunursa, görev konağı bağlamında doğru şekilde değerlendirilir.