Özellik Sayfası XML kural dosyaları

IDE'deki proje özellik sayfaları, varsayılan kurallar klasöründeki XML dosyaları tarafından yapılandırılır. XML dosyaları kuralların adlarını, kategorileri ve tek tek özellikleri, veri türlerini, varsayılan değerleri ve bunların nasıl görüntüleneceğini açıklar. IDE'de bir özellik ayarladığınızda, yeni değer proje dosyasında depolanır.

Varsayılan kurallar klasörünün yolu, yerel ayara ve kullanımda olan Visual Studio sürümüne bağlıdır. Visual Studio 2015 veya önceki bir geliştirici komut isteminde rules klasörü şeklindedir %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\<locale>. Değer <version> Visual Studio 2015'tedir v140 . <locale>, örneğin 1033 İngilizce için bir LCID'dir. Yüklü olan her Visual Studio sürümü ve her dil için farklı bir yol kullanacaksınız. Örneğin, Visual Studio 2015 Community sürümünün İngilizce varsayılan kural klasör yolu olabilir C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\1033\.

Varsayılan kurallar klasörünün yolu, yerel ayara ve kullanımda olan Visual Studio sürümüne bağlıdır. Visual Studio 2017 geliştirici komut isteminde rules klasörü şeklindedir %VSINSTALLDIR%Common7\IDE\VC\VCTargets\<locale>\. <locale>, örneğin 1033 İngilizce için bir LCID'dir. Visual Studio 2015 veya önceki bir geliştirici komut isteminde rules klasörü değeri %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\<locale>\Visual Studio 2015'tedir v140<version>. Yüklü olan her Visual Studio sürümü ve her dil için farklı bir yol kullanacaksınız. Örneğin, Visual Studio 2017 Community sürümünün İngilizce varsayılan kural klasör yolu olabilir C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\1033\.

Varsayılan kurallar klasörünün yolu, yerel ayara ve kullanımda olan Visual Studio sürümüne bağlıdır. Visual Studio 2019 veya sonraki bir geliştirici komut isteminde rules klasörü değeri %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\<locale>\Visual Studio 2019'dadır <version>v160 . <locale>, örneğin 1033 İngilizce için bir LCID'dir. Visual Studio 2017'de kurallar klasörü şeklindedir %VSINSTALLDIR%Common7\IDE\VC\VCTargets\<locale>\. Visual Studio 2015 veya önceki bir geliştirici komut isteminde rules klasörü şeklindedir %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\<version>\<locale>\. Yüklü olan her Visual Studio sürümü ve her dil için farklı bir yol kullanacaksınız. Örneğin, Visual Studio 2019 Community sürümünün İngilizce varsayılan kural klasör yolu olabilir C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\1033\.

Yalnızca birkaç senaryoda bu dosyaların ve Visual Studio IDE'nin iç çalışmalarını anlamanız gerekir:

  • Özel özellik sayfası oluşturmak veya
  • Visual Studio IDE'yi kullanmadan proje özelliklerinizi özelleştirmek istiyorsunuz.

Kural dosyalarının içeriği

İlk olarak, bir projenin özellik sayfalarını açalım. Çözüm Gezgini'da proje düğümüne sağ tıklayın ve Özellikler'i seçin:

Screenshot of the project Property Pages dialog.

Yapılandırma Özellikleri altındaki her düğüm kural olarak adlandırılır. Kural bazen derleyici gibi tek bir aracı temsil eder. Genel olarak, terim özellikleri olan, yürütülen ve bazı çıkışlar üretebilecek bir şeyi ifade eder. Her kural, varsayılan kurallar klasöründeki bir XML dosyasından doldurulur. Örneğin, burada gösterilen C/C++ kuralı tarafından cl.xmldoldurulur.

Her kuralın kategoriler halinde düzenlenmiş bir özellik kümesi vardır. Bir kural altındaki her alt düğüm bir kategoriyi temsil eder. Örneğin, C/C++ altındaki İyileştirme düğümü, derleyici aracının iyileştirmeyle ilgili tüm özelliklerini içerir. Özellikler ve değerleri sağ bölmede bir kılavuz biçiminde işlenir.

Not defterinde veya herhangi bir XML düzenleyicisinde açabilirsiniz cl.xml . adlı Rulebir kök düğüm görürsünüz. Kullanıcı arabiriminde görüntülenen özelliklerin listesini ve ek meta verileri tanımlar.

<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule Name="CL" PageTemplate="tool" DisplayName="C/C++" SwitchPrefix="/" Order="10" xmlns="http://schemas.microsoft.com/build/2009/properties" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Rule.Categories>
    <Category Name="General" DisplayName="General" />
    <Category Name="Optimization" DisplayName="Optimization" />
    <Category Name="Preprocessor" DisplayName="Preprocessor" />
    <Category Name="Code Generation" DisplayName="Code Generation" />
    <Category Name="Language" DisplayName="Language" />
    <Category Name="Precompiled Headers" DisplayName="Precompiled Headers" />
    <Category Name="Output Files" DisplayName="Output Files" />
    <Category Name="Browse Information" DisplayName="Browse Information" />
    <Category Name="Advanced" DisplayName="Advanced" />
    <Category Name="All Options" DisplayName="All Options" Subtype="Search" />
    <Category Name="Command Line" DisplayName="Command Line" Subtype="CommandLine" />
  </Rule.Categories>
  <!-- . . . -->
</Rule>

Özellik sayfaları kullanıcı arabiriminde Yapılandırma Özellikleri altında her düğüm için bir XML dosyası vardır. Kullanıcı arabirimine kurallar ekleyebilir veya kaldırabilirsiniz: Projedeki ilgili XML dosyalarına konumlar eklenerek veya kaldırılarak yapılır. Örneğin, bu şekilde Microsoft.CppBuild.targets (1033 klasöründen bir düzey daha yüksek bulundu) şunları içerir cl.xml:

<PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include="$(VCTargetsPath)$(LangID)\cl.xml"/>

Tüm verileri ayırdığınızda cl.xml şu temel çerçeveye sahip olursunuz:

<?xml version="1.0" encoding="utf-8"?>
<Rule>
  <Rule.DataSource />
  <Rule.Categories>
    <Category />
    <!-- . . . -->
  </Rule.Categories>
  <BoolProperty />
  <EnumProperty />
  <IntProperty />
  <StringProperty />
  <StringListProperty />
</Rule>

Sonraki bölümde her bir ana öğe ve ekleyebileceğiniz bazı meta veriler açıklanmaktadır.

Kural öznitelikleri

<Rule> Öğe, XML dosyasındaki kök düğümdür. Birçok özniteliği olabilir:

<Rule Name="CL" PageTemplate="tool" SwitchPrefix="/" Order="10"
          xmlns="http://schemas.microsoft.com/build/2009/properties"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Rule.DisplayName>
    <sys:String>C/C++</sys:String>
  </Rule.DisplayName>
  • Name: Name özniteliği, için Rulebir kimliktir. Projenin tüm özellik sayfası XML dosyaları arasında benzersiz olması gerekir.

  • PageTemplate: Bu özniteliğin değeri kullanıcı arabirimi tarafından kullanıcı arabirimi şablonları koleksiyonundan seçim yapmak için kullanılır. "Araç" şablonu, özellikleri standart bir kılavuz biçiminde işler. Bu öznitelik için diğer yerleşik değerler "hata ayıklayıcı" ve "genel" değerleridir. Bu değerlerin belirtilmesinden kaynaklanan kullanıcı arabirimi biçimini görmek için sırasıyla Hata Ayıklama düğümüne ve Genel düğümüne bakın. "Hata ayıklayıcı" sayfa şablonunun kullanıcı arabirimi, farklı hata ayıklayıcıların özellikleri arasında geçiş yapmak için bir açılan kutu kullanır. "Genel" şablonu, düğüm altında birden çok kategori alt düğümüne sahip olmanın aksine, farklı özellik kategorilerini Rule tek bir sayfada görüntüler. Bu öznitelik yalnızca kullanıcı arabirimine bir öneridir. XML dosyası kullanıcı arabiriminden bağımsız olacak şekilde tasarlanmıştır. Farklı bir kullanıcı arabirimi bu özniteliği farklı amaçlar için kullanabilir.

  • SwitchPrefix: Anahtarlar için komut satırında kullanılan ön ek. değeri"/", , , /nologo/W3vb. gibi /ZIgörünen anahtarlara neden olur.

  • Order: Sistemdeki diğer tüm kurallarla karşılaştırıldığında, bunun Rule göreli konumu üzerinde potansiyel kullanıcı arabirimi istemcisine bir öneri.

  • xmlns: Standart xml öğesi. Listelenen üç ad alanını görebilirsiniz. Bu öznitelikler sırasıyla XML seri durumdan çıkarma sınıfları, XML şeması ve sistem ad alanı ad alanlarına karşılık gelir.

  • DisplayName: Düğümün özellik sayfası kullanıcı arabiriminde Rule gösterilen ad. Bu değer yerelleştirilir. İç yerelleştirme aracı gereksinimleri nedeniyle özniteliği (veya gibiSwitchPrefixName) yerine öğesinin alt öğesi Rule olarak oluşturdukDisplayName. XML açısından her ikisi de eşdeğerdir. Bu nedenle, dağınıklığı azaltmak veya olduğu gibi bırakmak için bunu bir öznitelik haline getirebilirsiniz.

  • DataSource: Bu önemli özellik, proje sistemine özellik değerini okuyup yazacak konumu ve gruplandırmasını bildirir (daha sonra açıklanmıştır). için cl.xmlbu değerler şunlardır:

    <DataSource Persistence="ProjectFile" ItemType="ClCompile" Label="" HasConfigurationCondition="true" />
    
    • Persistence="ProjectFile" , proje sistemine için tüm özelliklerin Rule proje dosyasına veya özellik sayfası dosyasına yazılması gerektiğini bildirir (özellik sayfalarını ortaya çıkarmada kullanılan düğüme bağlı olarak). Diğer olası değer ise değerini dosyaya yazacak olan değeridir"UserFile".user.

    • ItemType="ClCompile" özelliklerin, bu öğe türündeki ItemDefinition meta verileri veya öğe meta verileri (yalnızca özellik sayfaları çözüm gezginindeki bir dosya düğümünden oluşturulursa ikincisi) olarak depolandığını belirtir. Bu alan ayarlı değilse, özellik bir PropertyGroup'ta ortak bir özellik olarak yazılır.

    • Label="" , özellikler meta veri olarak ItemDefinition yazıldığında üst ItemDefinitionGroup etiketinin boş olacağını gösterir (her MSBuild öğesi bir Label'a sahip olabilir). Visual Studio 2017 ve üzeri etiketli grupları kullanarak .vcxproj proje dosyasında gezinebilirsiniz. Çoğu Rule özelliği içeren grupların etiket olarak boş bir dizesi vardır.

    • HasConfigurationCondition="true" , proje sistemine yalnızca geçerli proje yapılandırması için geçerli olacak şekilde bir yapılandırma koşulu eklemesini söyler (koşul üst gruba veya değerin kendisine yapıştırılabilir). Örneğin, proje düğümündeki özellik sayfalarını açın ve Yapılandırma Özellikleri > C/C++ Genel altındaki Uyarıları Hata Olarak Kabul Et özelliğinin değerini "Evet" olarak ayarlayın. Aşağıdaki değer proje dosyasına yazılır. Üst ItemDefinitionGroup'a eklenen yapılandırma koşuluna dikkat edin.

      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
        <ClCompile>
          <TreatWarningAsError>true</TreatWarningAsError>
        </ClCompile>
      </ItemDefinitionGroup>
      

      Bu değer, gibi stdafx.cppbelirli bir dosyanın özellik sayfasında ayarlanırsa, özellik değeri Burada gösterildiği gibi proje dosyasındaki öğenin altına stdafx.cpp yazılmalıdır. Yapılandırma koşulunun meta verilerin kendisine doğrudan eklendiğine dikkat edin:

      <ItemGroup>
        <ClCompile Include="stdafx.cpp">
          <TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</TreatWarningAsError>
        </ClCompile>
      </ItemGroup>
      

    Burada listelenmeyen DataSource başka bir özniteliği de şeklindedir PersistedName. Proje dosyasındaki bir özelliği farklı bir ad kullanarak temsil etmek için bu özniteliği kullanabilirsiniz. Varsayılan olarak, bu öznitelik özelliğin Namedeğerine ayarlanır.

    Tek bir özellik üst Ruleöğesini geçersiz kılabilirDataSource. Bu durumda, bu özelliğin değerinin konumu içindeki Rulediğer özelliklerden farklı olacaktır.

  • ve gibi DescriptionSupportsFileBatchingbaşka öznitelikleri Rulede burada gösterilmez. Bir veya başka bir Rule öğe üzerinde geçerli olan tüm öznitelikler, bu türlerin belgelerine göz atılarak elde edilebilir. Alternatif olarak, derlemedeki ad alanında Microsoft.Build.Framework.dll yer alan türlerdeki Microsoft.Build.Framework.XamlTypes genel özellikleri inceleyebilirsiniz.

  • DisplayName, PageTemplateve Order bu kullanıcı arabirimi bağımsız veri modelinde bulunan kullanıcı arabirimiyle ilgili özelliklerdir. Bu özelliklerin özellik sayfalarını görüntülemek için kullanılan herhangi bir kullanıcı arabirimi tarafından kullanılması neredeyse kesindir. DisplayName ve Description XML dosyasındaki neredeyse tüm öğelerde bulunan iki özellik. Ve yalnızca bu iki özellik yerelleştirilir.

Kategori öğeleri

bir Rule öğesinin birden çok Category öğesi olabilir. Kategorilerin XML dosyasında listelenme sırası, kullanıcı arabiriminin kategorileri aynı sırada görüntülemesi için bir öneridir. Örneğin, kullanıcı arabiriminde gördüğünüz C/C++ düğümü altındaki kategorilerin sırası ile içindeki cl.xmlsıra aynıdır. Örnek kategori şöyle görünür:

<Category Name="Optimization">
  <Category.DisplayName>
    <sys:String>Optimization</sys:String>
  </Category.DisplayName>
</Category>

Bu kod parçacığı, daha önce açıklanan ve DisplayName özniteliklerini gösterirName. Bir kez daha, örneğinde gösterilmeyen sahip olabileceği başka öznitelikler Category de vardır. Belgeleri okuyarak veya kullanarak ildasm.exederlemeleri inceleyerek bunlar hakkında bilgi edinebilirsiniz.

Özellik öğeleri

Kural dosyasının çoğu öğelerden Property oluşur. Bir içindeki Ruletüm özelliklerin listesini içerir. Her özellik, temel çerçevede gösterilen beş olası türden biri olabilir: BoolProperty, EnumProperty, IntProperty, StringPropertyve StringListProperty. Dosyanızda bu türlerden yalnızca birkaçı olabilir. Bir özelliğin ayrıntılı olarak açıklanması için izin veren bir dizi özniteliği vardır. StringProperty burada açıklanmıştır. Gerisi benzer.

<StringProperty Subtype="file" Name="ObjectFileName" Category="Output Files" Switch="Fo">
  <StringProperty.DisplayName>
    <sys:String>Object File Name</sys:String>
  </StringProperty.DisplayName>
  <StringProperty.Description>
    <sys:String>Specifies a name to override the default object file name; can be file or directory name.(/Fo[name])</sys:String>
  </StringProperty.Description>
</StringProperty>

Kod parçacığındaki özniteliklerin çoğu daha önce açıklanmıştır. Yeni olanlar , Categoryve SwitchşeklindedirSubtype.

  • Subtypeyalnızca ve StringListProperty öğeleri için StringProperty kullanılabilen bir özniteliktir. Bağlamsal bilgiler verir. Örneğin, değeri file özelliğin bir dosya yolunu temsil ettiğini gösterir. Visual Studio, düzenleme deneyimini geliştirmek için bu tür bağlamsal bilgileri kullanır. Örneğin, kullanıcının dosyayı görsel olarak özelliğin düzenleyicisi olarak seçmesine olanak tanıyan bir Windows Gezgini penceresi sağlayabilir.

  • Category: Bu özelliğin altında yer aldığı kategori. Bu özelliği kullanıcı arabirimindeki Çıkış Dosyaları kategorisinin altında bulmayı deneyin.

  • Switch: Bir kural derleyici aracı gibi bir aracı temsil ettiğinde, çoğu Rule özellik derleme zamanında aracın yürütülebilir dosyası olarak geçirilir. Bu özniteliğin değeri, kullanılacak anahtar değişmez değerini gösterir. Örnek, <StringProperty> anahtarının olması Fogerektiğini belirtir. üst Ruleöğesindeki SwitchPrefix özniteliğiyle birlikte, bu özellik yürütülebilir dosyaya olarak /Fo"Debug\"geçirilir. Özellik sayfası kullanıcı arabiriminde C/C++ komut satırında görünür.

    Diğer özellik öznitelikleri şunlardır:

  • Visible: Özelliğinizin özellik sayfalarında görünmesini istemiyor ancak derleme zamanında kullanılabilir olmasını istiyorsanız, bu özniteliği olarak falseayarlayın.

  • ReadOnly: Özellik sayfalarında bu özelliğin değerinin salt okunur bir görünümünü sağlamak istiyorsanız, bu özniteliği olarak trueayarlayın.

  • IncludeInCommandLine: Derleme zamanında bir aracın bazı özelliklerine ihtiyacı olmayabilir. Belirli bir özelliğin geçirilmesini önlemek için bu özniteliği false olarak ayarlayın.