Aracılığıyla paylaş


Öğeleri ve özellikleri değerlendirme ve hedeflerin sonuçlarını görüntüleme

Bir derleme gerçekleştirmeden MSBuild öğeleri ve özelliklerinin sahip olacağı değerleri alabilirsiniz. Bu seçenek, istenen derleme işlemi için giriş olarak bu değerlere ihtiyacınız olduğunda yararlıdır, ancak değeri almak için bir projeyi değerlendirmeniz gerekir.

Ayrıca, oluşturulan MSBuild hedeflerinden döndürülen sonuçlar için biçimlendirilmiş çıkış da oluşturabilirsiniz. Bu, bir derleme aracı yazmakta olduğunuz ve belirli bir hedefin çıkışlarıyla bir şeyler yapmanız gereken senaryolarda yararlı olabilir.

Değerlerin çıktısını almak için komut satırı seçeneklerini kullanma

AŞAĞıDAKI komut satırı seçenekleri MSBuild 17.8 ve sonraki sürümlerde kullanılabilir.

Komut satırı seçeneği Açıklama
-getProperty:{propertyName,...} Belirtilen özelliğin veya özelliklerin değerini alın.
-getItem:{itemName,...} Belirtilen öğe veya öğelerin değerlerini ve ilişkili meta verilerini alın.
-getTargetResult:{targetName,...} Hedefin veya hedeflerin çıkış değerlerini alın.

seçeneğini kullanarak -target komut satırında bir hedef belirtmezseniz ve -getProperty-getItem seçenekleri MSBuild değerlendirmesinden değerleri döndürür ve hiçbir hedef oluşturulmaz. -target Seçenek belirtilirse, döndürülen özellik veya öğe değerleri, derleme tamamlandıktan sonra, yani istenen tüm hedefler tamamlanmaya çalıştırıldıktan sonra değerlerdir.

Eğer -getTargetResult belirlerseniz, talep edilen tüm hedefler, sizin -target ile belirttiğiniz gibi ve talep ettiğiniz diğer hedeflerle birlikte otomatik olarak oluşturulur.

Özelliklerin öğelerden önce değerlendirildiğini unutmayın, bu nedenle bir öğeye başvuran bir özellik için kullanıyorsanız -getProperty , öğe değerlendirmesi yapılmadan önce veya sonra sonucu alıp almadığınıza bağlı olarak farklı bir çıkış elde edersiniz. Örneğin, (veya -getProperty) seçeneğini kullanmadan -target kullanırsanız-getTargetResult, özellik değerini öğe değerlendirmesi olmadan alırsınız, ancak belirtirseniz -targets (veya -getTargetResult), öğe değerlendirmeden sonra nihai sonucu alırsınız. Bkz. MSBuild projeleri nasıl derler.

Bu komutları veya ile MSBuild.exe veya gibi dotnet builddiğer dotnet komutlarla dotnet publishkullanabilirsiniz. Bkz MSBuild komut satırı başvurusu ve dotnet komutu.

Tek bir özellik istemek için -getProperty kullanırsanız, çıkış metin olarak oluşturulur. Bu, değeri betik senaryolarında veya daha karmaşık bir komut satırında kolayca kullanabileceğiniz anlamına gelir.

Birden çok özellik istemek için kullanıyorsanız -getProperty veya veya -getItemkullanıyorsanız-getTargetResult, çıkış bir JSON biçimindedir. Öğeler ilişkili meta verileriyle birlikte gönderilir.

Örneğin, aşağıdaki komut, öğe ve hedeften elde edilen sonuçlar olarak iki özellik Compile istemektedir Build :

msbuild ConsoleApp1.csproj -getProperty:TargetFramework,OutDir -getItem:Compile -getTargetResult:Build

komutu, özellikler, öğeler ve hedef sonuçların bu sırada birlikte gruplandığı aşağıdaki JSON çıkışını oluşturur:

{
  "Properties": {
    "TargetFramework": "net6.0",
    "OutDir": "bin\\Debug\\net6.0\\"
  },
  "Items": {
    "Compile": [
      {
        "Identity": "Program.cs",
        "FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\Program.cs",
        "RootDir": "c:\\",
        "Filename": "Program",
        "Extension": ".cs",
        "RelativeDir": "",
        "Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\",
        "RecursiveDir": "",
        "ModifiedTime": "2022-07-26 14:40:20.2657461",
        "CreatedTime": "2022-07-26 14:40:13.0808797",
        "AccessedTime": "2023-11-30 13:38:05.4556046",
        "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.Sdk.DefaultItems.props",
        "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
        "DefiningProjectName": "Microsoft.NET.Sdk.DefaultItems",
        "DefiningProjectExtension": ".props"
      },
      {
        "Identity": "obj\\Debug\\net6.0\\ConsoleApp1.GlobalUsings.g.cs",
        "FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.GlobalUsings.g.cs",
        "RootDir": "c:\\",
        "Filename": "ConsoleApp1.GlobalUsings.g",
        "Extension": ".cs",
        "RelativeDir": "obj\\Debug\\net6.0\\",
        "Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
        "RecursiveDir": "",
        "ModifiedTime": "2022-07-26 14:40:30.6973207",
        "CreatedTime": "2022-07-26 14:40:30.6968276",
        "AccessedTime": "2023-11-30 13:38:05.4556046",
        "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.GenerateGlobalUsings.targets",
        "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
        "DefiningProjectName": "Microsoft.NET.GenerateGlobalUsings",
        "DefiningProjectExtension": ".targets"
      },
      {
        "Identity": "obj\\Debug\\net6.0\\.NETCoreApp,Version=v6.0.AssemblyAttributes.cs",
        "FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\.NETCoreApp,Version=v6.0.AssemblyAttributes.cs",
        "RootDir": "c:\\",
        "Filename": ".NETCoreApp,Version=v6.0.AssemblyAttributes",
        "Extension": ".cs",
        "RelativeDir": "obj\\Debug\\net6.0\\",
        "Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
        "RecursiveDir": "",
        "ModifiedTime": "2023-11-30 13:38:04.4893499",
        "CreatedTime": "2022-07-26 14:40:31.9799773",
        "AccessedTime": "2023-11-30 13:38:05.4556046",
        "DefiningProjectFullPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.Common.CurrentVersion.targets",
        "DefiningProjectDirectory": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\",
        "DefiningProjectName": "Microsoft.Common.CurrentVersion",
        "DefiningProjectExtension": ".targets"
      },
      {
        "Identity": "obj\\Debug\\net6.0\\ConsoleApp1.AssemblyInfo.cs",
        "FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.AssemblyInfo.cs",
        "RootDir": "c:\\",
        "Filename": "ConsoleApp1.AssemblyInfo",
        "Extension": ".cs",
        "RelativeDir": "obj\\Debug\\net6.0\\",
        "Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
        "RecursiveDir": "",
        "ModifiedTime": "2023-11-30 13:38:04.5569391",
        "CreatedTime": "2022-07-26 14:40:32.0372385",
        "AccessedTime": "2023-11-30 13:38:05.4556046",
        "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.GenerateAssemblyInfo.targets",
        "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
        "DefiningProjectName": "Microsoft.NET.GenerateAssemblyInfo",
        "DefiningProjectExtension": ".targets"
      }
    ]
  },
  "TargetResults": {
    "Build": {
      "Result": "Success",
      "Items": [
        {
          "Identity": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\ConsoleApp1.dll",
          "TargetFrameworkIdentifier": ".NETCoreApp",
          "TargetPlatformMoniker": "",
          "CopyUpToDateMarker": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.csproj.CopyComplete",
          "TargetPlatformIdentifier": "",
          "TargetFrameworkVersion": "6.0",
          "ReferenceAssembly": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ref\\ConsoleApp1.dll",
          "FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\ConsoleApp1.dll",
          "RootDir": "c:\\",
          "Filename": "ConsoleApp1",
          "Extension": ".dll",
          "RelativeDir": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\",
          "Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\",
          "RecursiveDir": "",
          "ModifiedTime": "2023-11-30 13:38:06.5084339",
          "CreatedTime": "2023-11-30 13:38:06.9308716",
          "AccessedTime": "2023-11-30 13:38:06.9318732",
          "DefiningProjectFullPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.Common.CurrentVersion.targets",
          "DefiningProjectDirectory": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\",
          "DefiningProjectName": "Microsoft.Common.CurrentVersion",
          "DefiningProjectExtension": ".targets"
        }
      ]
    }
  }
}

Elbette, kabuk tarafından sağlanan simgeyi kullanarak > standart çıkışı yeniden yönlendirerek konsola yazmak yerine çıkışı bir dosyaya kaydedebilirsiniz.

Sonraki Adımlar

Burada açıklanan komut satırı seçenekleri, MSBuild'in değerlendirme aşamasını nasıl ayırdığı, özelliklerin ve öğelerin değerlerine atandığı ve hedeflerin çalıştırıldığı ve çıkış ürettiği yürütme aşamasına göre çalışır. MSBuild derleme değerlendirme ve yürütme aşamaları hakkında daha fazla bilgi için bkz. MSBuild projeleri derleme.