Ö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:
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.xml
doldurulur.
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ı Rule
bir 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çinRule
bir 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 kategorileriniRule
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
/W3
vb. gibi/ZI
görünen anahtarlara neden olur.Order
: Sistemdeki diğer tüm kurallarla karşılaştırıldığında, bununRule
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ı arabirimindeRule
gösterilen ad. Bu değer yerelleştirilir. İç yerelleştirme aracı gereksinimleri nedeniyle özniteliği (veya gibiSwitchPrefix
Name
) yerine öğesinin alt öğesiRule
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çincl.xml
bu değerler şunlardır:<DataSource Persistence="ProjectFile" ItemType="ClCompile" Label="" HasConfigurationCondition="true" />
Persistence="ProjectFile"
, proje sistemine için tüm özelliklerinRule
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 olarakItemDefinition
yazıldığında üst ItemDefinitionGroup etiketinin boş olacağını gösterir (her MSBuild öğesi bir Label'a sahip olabilir). Visual Studio 2017 ve üzeri, .vcxproj proje dosyasında gezinmek için etiketli grupları kullanır. ÇoğuRule
ö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.cpp
belirli bir dosyanın özellik sayfasında ayarlanırsa, özellik değeri Burada gösterildiği gibi proje dosyasındaki öğenin altınastdafx.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 şeklindedirPersistedName
. Proje dosyasındaki bir özelliği farklı bir ad kullanarak temsil etmek için bu özniteliği kullanabilirsiniz. Varsayılan olarak, bu öznitelik özelliğinName
değerine ayarlanır.Tek bir özellik üst
Rule
öğesini geçersiz kılabilirDataSource
. Bu durumda, bu özelliğin değerinin konumu içindekiRule
diğer özelliklerden farklı olacaktır.ve gibi
Description
SupportsFileBatching
başka öznitelikleriRule
de burada gösterilmez. Bir veya başka birRule
öğe üzerinde geçerli olan tüm öznitelikler, bu türlerin belgelerine göz atılarak elde edilebilir. Alternatif olarak, derlemedeki ad alanındaMicrosoft.Build.Framework.dll
yer alan türlerdekiMicrosoft.Build.Framework.XamlTypes
genel özellikleri inceleyebilirsiniz.DisplayName
,PageTemplate
veOrder
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
veDescription
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.xml
sı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.exe
derlemeleri inceleyerek bunlar hakkında bilgi edinebilirsiniz.
Özellik öğeleri
Kural dosyasının çoğu öğelerden Property
oluşur. Bir içindeki Rule
tüm özelliklerin listesini içerir. Her özellik, temel çerçevede gösterilen beş olası türden biri olabilir: BoolProperty
, EnumProperty
, IntProperty
, StringProperty
ve 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 , Category
ve Switch
şeklindedirSubtype
.
Subtype
yalnızca veStringListProperty
öğeleri içinStringProperty
kullanılabilen bir özniteliktir. Bağlamsal bilgiler verir. Örneğin, değerifile
ö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ğuRule
ö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ıFo
gerektiğini belirtir. üstRule
öğesindekiSwitchPrefix
ö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 olarakfalse
ayarlayı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 olaraktrue
ayarlayın.IncludeInCommandLine
: Derleme zamanında bir aracın bazı özelliklerine ihtiyacı olmayabilir. Belirli bir özelliğin geçirilmesini önlemek için bu özniteliğifalse
olarak ayarlayın.