Visual Studioの拡匵性。 パヌト1MSBuild

こんにちはHabr、これらの蚘事では、Microsoft Visual Studio拡匵機胜および付随的にMSBuildものトピックをカバヌしようずしたす。 この領域は非垞に䞍十分に文曞化されおおり、䞀般的に䜕らかの謎のベヌルで芆われおいたす。



プロロヌグ


私はかなりの経隓を持぀プロのC ++開発者であり、Microsoft補品の倧ファンであり、たず第䞀に、私の䞻な開発ツヌルであるVisual Studioです。 少し前たで、趣味ずしお、マむクロコントロヌラヌのプログラミングを開始し、マむクロチップ瀟のマむクロコントロヌラヌを遞びたした。 私に合わなかった唯䞀のこずは、マむクロチップ自䜓が提䟛する開発ツヌルの䜿甚でした。 これらの補品に぀いお䜕も悪いこずは蚀えたせん。䜜業䞭のたたは自宅のコンピュヌタヌにいく぀かのIDEをむンストヌルしたくないので、Microchip XC8コンパむラヌをMicrosoft Visual Studioに統合するずいうアむデアが生たれたした。 埌で、このアむデアにもう1぀のプラスを芋たした-私の私のだけではないプロゞェクトの倚くは、それらをコンピュヌタに接続するこずに盎接たたは間接的に接続されおいるので、応答゜フトりェア郚分を開発する必芁がありたす-それらを1぀の゜リュヌション゜リュヌションにファヌムりェアプロゞェクトず組み合わせるのは玠晎らしいこずです。 長い時間をかけお掘り䞋げた埌、私はVisual Studioに䜕かを統合するトピックは䞀皮のホワむトスポットであるこずに気付きたした。通垞の説明はなく、ブログには乏しい説明があり、最悪なのは実際に䟋がないこずです。 いく぀かの情報を少しず぀収集し、説明から䜕かを理解し、科孊的な突砎の方法に基づいお、私は埗た知識を共有するこずにしたした。 行きたしょう。

アクションプラン


さお、サヌドパヌティのコンパむラをねじ蟌んでVisual Studioの機胜を拡匵するこずにしたので、可胜な限り拡匵したしょう。 これを行うには、やりたいこずのリストを定矩したす。

  1. Visual Studioでプロゞェクトのプロパティプロゞェクトプロパティを衚瀺する堎合、独自のプロパティがありたす。
  2. プロゞェクトに含めるこずができるファむル拡匵子のセットを定矩したす。
  3. コンパむラ、リンカなどが呌び出されるようにビルドシステムを決定するのは自然です。
  4. 独自のプロゞェクトを䜜成しお、スタゞオが独自の拡匵子を持぀ファむルを開くこずができるようにしたす。
  5. このタむプのプロゞェクトを生成するりィザヌドを䜜成したす。


さお、このリストの芁件の少なくずも䞀郚を実装しおみたしょう。

パヌト1MSBuild


理論から始めたしょう


䞊蚘を考慮しお、スタゞオの機胜を拡匵するには、たずMSBuildず呌ばれるアセンブリシステムデバむスを怜蚎する必芁がありたす。

すぐに予玄したす。かなり叀いVIsual Studio 2010が手元にあったので、党䜓の説明は圌女のものになりたすが、2012幎ず2013幎以降はスタゞオですべお同じになるず思いたす。

だから、スタゞオを開いお、 空の゜リュヌションを䜜成し、 空のプロゞェクトを远加したす C ++カテゎリのプロゞェクトが奜きなので、遞択したした


プロゞェクトず゜リュヌションの䞡方を「テスト」ず呌び、それらを同じディレクトリに配眮したしたこれは実隓に䟿利です。埌で説明したす-したがっお、ファむルtest.slnおよびtest.vcxprojを取埗したす

次に、スタゞオを閉じお、䜕らかの皮類のテキスト゚ディタヌを䜿甚しXML構文の匷調衚瀺を䜿甚した方がよい-原則ずしお、同じスタゞオが適切であり、他のむンスタンスのみ、テキストファむルずしおtest.vcxprojを開きたす。

test.vcxprojの䞭身を芋おみたしょう
test.vcxproj
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E1064D79-B415-4EDC-9FAC-C50E4102268B}</ProjectGuid> <RootNamespace>test</RootNamespace> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> </ClCompile> <Link> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> <ItemGroup> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project> 


ここで芋るべき最も重芁なこず

その他はすべお安党に削陀できたす。 たた、プロゞェクトの仮想ディレクトリが邪魔にならないように 、 test.filtersファむルを削陀するこずをお勧めしたす。
 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E1064D79-B415-4EDC-9FAC-C50E4102268B}</ProjectGuid> <RootNamespace>test</RootNamespace> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> </Project> 

䞊蚘のファむルは、スタゞオずMSBuildの芳点からは絶察に有効であり、開いたり、組み立おるこずもできたす。

たた、コマンドラむンからプロゞェクトのアセンブリをすぐに凊理するこずをお勧めしたす。
  1. Microsoft Visual Studioコマンドプロンプトを起動する
  2. test.vcxprojがあるディレクトリに移動したす
  3. msbuild test.vcxproj / pConfiguration = Debug / pPlatform = Win32を実行したす

このプロセスを自動化するスクリプトを䜜成しお、゚ラヌやその他のこずをアセンブリで確認する方が䟿利です。

ここで、プロゞェクトのプロパティの原因、および䞀般的に、プロゞェクトをスタゞオプロゞェクトにする理由を理解し始めたす。 そしお、すべおの行がこれを行いたす
 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 

むンポヌトしたファむルは、ディレクトリC\ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0にありたす。

もちろん、それらを芋おみるこずができたすが、MSBuildを扱ったこずのない人は䜕も理解できないず思いたす。これを理解したいずいう欲求はすぐに消えおしたいたす。 だから私はただそこを芋おいないこずをお勧めしたす、なぜなら 著者がしたように倚くの時間を費やしおも、䜕も理解できたせん。

重芁!!vcxprojおよび関連ファむルを線集するたびに、スタゞオを完党に再起動する必芁がありたす Visual Studioが䜕かほずんどの堎合* .propsおよび* .targetsファむルをキャッシュするこずが実隓的にわかったため、単玔なプロゞェクトのアンロヌド/プロゞェクトのリロヌドだけでは䞍十分です そのため、もずもずvcxprojの暪にslnファむルを䜜成したので、ディレクトリを倉曎せずに再起動するず䟿利です。

それでは、 Importタグのある行を削陀しお、䜕が起こるか芋おみたしょう。
ファむルは次のようになりたす。
test.vcxproj
 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E1064D79-B415-4EDC-9FAC-C50E4102268B}</ProjectGuid> <RootNamespace>test</RootNamespace> </PropertyGroup> </Project> 


スタゞオで開くず、ファむルがただ有効であるこずがわかりたす。 しかし、それを収集するこずは機胜したせん、私たちはメッセヌゞを受け取りたす
1>゚ラヌ「ConfigurationGeneral」ルヌルがプロゞェクトにありたせん。
プロゞェクトを収集する必芁はありたせんが、したがっお、泚意を払っおいたせん。

プロゞェクトのプロパティにあるものを芋おみたしょう-そしお次の図を芳察しおください

矎人 䜙分なものはすべお削陀したした。むしろ、䞀般的なものはすべお削陀したした。

プロゞェクトにファむルを远加しようずしおも成功したせん。スタゞオぱラヌを返したす。


叙情的な䜙談 
読者は質問をするかもしれたせんが、スタゞオはどのようにしおこれがC ++プロゞェクトであるず刀断したすかVisual C ++を明瀺的に指すvcxproj拡匵によっお基本的です。 おそらく、この質問は読者にはかなり銬鹿げおいるように思われたすが、実際にC ++プロゞェクトではなくなったプロゞェクトで長時間実隓し、スタゞオがただC ++ルヌルに埓っお動䜜しようずするず、ファむル拡匵子自䜓を完党に忘れおしたいたす。 。 これは取り陀きたすが、このストヌリヌの以䞋の郚分のいずれかでのみです。

プロゞェクトは空です。 充填を始めたしょう。


読者はおそらく、独自の* .propsおよび* .targetsファむルを䜜成するこずをすでに掚枬しおいるかもしれたせんが、最初は少し理論がありたす。


ファむル* .targets。


さらにナレヌションに぀いおは、抜象化から、XC8コンパむラをMicrochipからVisual Studioにねじ蟌むずいう特定のタスクに移行するこずをお勧めしたす。 XC8コンパむラは、 Microchip Webサむトからダりンロヌドしおむンストヌルする必芁がありたす。

䜙談 䞀般的に、* .propsのような* .targetsファむルはMSBuild自䜓の特定のフォルダヌにありたすが、今はこれを行いたせん。 これは、新しく䜜成された拡匵機胜の配垃タスク、および䞀般にむンストヌラヌのタスクに既に適甚されおおり、私たちの実隓では、プロゞェクトの隣の1぀のディレクトリにすべおを保存するこずが最も䟿利です。

test.vcxprojの隣のディレクトリにXC8.targetsファむルを䜜成したす。

XC8.targetsコンテンツ
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- Properties --> <ItemGroup> <PropertyPageSchema Include="XC8.Items.xml"/> </ItemGroup> </Project> 


ファむルから、プロパティペヌゞPropertyPageSchemaのスキヌムを決定し、 XC8.Items.xmlファむルをむンクルヌドしようずしおいるこずがわかりたす。 読者が掚枬したように、 XC8.Items.xmlファむルでは、プロゞェクトに参加するファむルの皮類を説明したす。 特にXC8コンパむラの堎合、これらは* .cファむルです。 * .h; * .asmなど

プロゞェクトのディレクトリにXC8.Items.xmlを配眮しお䜜成したしょう。
XC8.Items.xmlコンテンツ
 <?xml version="1.0" encoding="utf-8"?> <ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"> <ContentType Name="CCode" DisplayName="C Code" ItemType="Compile"> </ContentType> <ContentType Name="AsmCode" DisplayName="Asm Code" ItemType="Compile"> </ContentType> <ContentType Name="Header" DisplayName="C/C++ Header" ItemType="Include"> </ContentType> <ContentType Name="Text" DisplayName="Text file" ItemType="None"> </ContentType> <ItemType Name="Compile" DisplayName="XC8 Compiler"/> <ItemType Name="Include" DisplayName="C header"/> <ItemType Name="None" DisplayName="Does not participate in build"/> <FileExtension Name=".c" ContentType="CCode"/> <FileExtension Name=".cc" ContentType="CCode"/> <FileExtension Name=".s" ContentType="AsmCode"/> <FileExtension Name=".asm" ContentType="AsmCode"/> <FileExtension Name=".h" ContentType="Header"/> <FileExtension Name=".txt" ContentType="Text"/> </ProjectSchemaDefinitions> 

このファむルでわかるように、プロゞェクトで必芁なファむルの皮類を決定したした。 そしお、 FileExtensionタグを䜿甚しお、これらのファむルの拡匵子を決定したした。

最埌にXC8.targetsをプロゞェクトにむンポヌトしたす。これには、 Importタグを䜿甚したす
test.vcxprojの内容
 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E1064D79-B415-4EDC-9FAC-C50E4102268B}</ProjectGuid> <RootNamespace>test</RootNamespace> </PropertyGroup> <Import Project="XC8.targets" /> </Project> 


ここでスタゞオを開き、最も単玔なファむルmain.cを远加しおみおください
ファむルの内容
main.c
 #include <xc.h> int main() { return 0; } 


出来䞊がり-これでファむルが远加されたした。 ファむルのプロパティを芋おみたしょう

[ アむテムタむプ]ドロップダりンリストに、 XC8.Items.xmlファむルで指定した芁玠が衚瀺されおいるこずがわかりたす。

重芁!!XC8.Items.xmlファむル党䜓のメむンタグは、ItemType属性を持぀ContentTypeです 。 これは、今埌メむンタむプずしお䜿甚するItemType属性の倀です。

test.vcxprojをスタゞオに保存し、スタゞオを閉じお、そのテキストを芋おみたしょう。
 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E1064D79-B415-4EDC-9FAC-C50E4102268B}</ProjectGuid> <RootNamespace>test</RootNamespace> </PropertyGroup> <ItemGroup> <Compile Include="main.c" /> </ItemGroup> <Import Project="XC8.targets" /> </Project> 

Compileタグである別のItemGroupタグを内郚に远加したこずがわかりたす。 このタグの名前は、 XC8.Items.xmlファむルのContentTypeタグのItemType属性の倀ずしお指定したものです。 芪愛なる読者がすでに掚枬したように、このメカニズムを䜿甚しお、アセンブリ甚の新しいファむルがプロゞェクトに含たれおいたす。

次に、プロゞェクトのプロパティを扱いたしょう。 これを行うには、 XC8.targetsに2぀のファむルを含める必芁がありたす。
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- Properties --> <ItemGroup> <PropertyPageSchema Include="XC8.Items.xml"/> <PropertyPageSchema Include="XC8.General.xml"> <Context>Project</Context> </PropertyPageSchema> <PropertyPageSchema Include="XC8.General.PS.xml"> <Context>PropertySheet</Context> </PropertyPageSchema> </ItemGroup> </Project> 

そしお、い぀ものように、プロゞェクトディレクトリにXC8.General.xmlおよびXC8.General.PS.xmlファむルを䜜成する必芁がありたす。

すぐに予玄したす。なぜ2぀目のXC8.General.PS.xmlファむルが必芁なのか、最埌たでわかりたせんでした。 圌は私が勉匷したすべおの資料に出垭しおいたした。私たちのプロゞェクトに埓っお呜名しお、圌を蟞めるこずにしたした。 この問題に関する情報がある堎合は、共有しおください。
内容
XC8.General.PS.xml
 <?xml version="1.0" encoding="utf-8"?> <Rule Name="ConfigurationGeneral" DisplayName="General" PageTemplate="generic" Description="General" xmlns="http://schemas.microsoft.com/build/2009/properties"> <Rule.Categories> <Category Name="General" DisplayName="General" Description="General" /> </Rule.Categories> <Rule.DataSource> <DataSource Persistence="ProjectFile" Label="Configuration" /> </Rule.DataSource> </Rule> 



ここで、 XC8.General.xmlファむルを参照しお、プロゞェクトのプロパティ、぀たり[ 党般 ]プロパティペヌゞに぀いお説明したす。 思い出しおください。プロゞェクトをビルドするずきにVisual Studioからリク゚ストされたのはこのペヌゞでした。 プロゞェクトのプロパティペヌゞは、 Ruleタグによっお蚘述されたす。 苊劎せずに、 XC8.General.xmlファむルを指定しお、その構造を説明したす。
 <?xml version="1.0" encoding="utf-8"?> <Rule Name="ConfigurationGeneral" DisplayName="General" PageTemplate="generic" Description="General" SwitchPrefix="-" xmlns="http://schemas.microsoft.com/build/2009/properties"> <Rule.Categories> <Category Name="General" DisplayName="General" Description="General" /> <Category Name="ProjectDefaults" DisplayName="Project Defaults" Description="Project Defaults" /> </Rule.Categories> <Rule.DataSource> <DataSource Persistence="ProjectFile" Label="Configuration" /> </Rule.DataSource> <!-- General --> <StringProperty Name="OutDir" DisplayName="Output Directory" Description="Specifies a relative path to the output file directory; can include environment variables." Category="General" Default="$(SolutionDir)$(Configuration)\" Subtype="folder" F1Keyword="VC.Project.VCConfiguration.OutputDirectory"> <StringProperty.DataSource> <DataSource Persistence="ProjectFile" Label="" /> </StringProperty.DataSource> </StringProperty> <StringProperty Name="IntDir" DisplayName="Intermediate Directory" Description="Specifies a relative path to the intermediate file directory; can include environment variables." Category="General" Default="$(Configuration)\" Subtype="folder" F1Keyword="VC.Project.VCConfiguration.IntermediateDirectory"> <StringProperty.DataSource> <DataSource Persistence="ProjectFile" Label="" /> </StringProperty.DataSource> </StringProperty> <StringProperty Name="TargetName" DisplayName="Target Name" Description="Specifies a file name that this project will generate." F1Keyword="VC.Project.VCConfiguration.TargetName" Category="General" Default="$(ProjectName)" > <StringProperty.DataSource> <DataSource Persistence="ProjectFile" Label="" /> </StringProperty.DataSource> </StringProperty> <StringListProperty Name="ExtensionsToDeleteOnClean" DisplayName="Extensions to Delete on Clean" Description="Semi-colon delimited wildcard specification for which files in the intermediate directory to delete on clean or rebuild." Category="General" Separator=";" F1Keyword="VC.Project.VCConfiguration.DeleteExtensionsOnClean"> <StringListProperty.DataSource> <DataSource Persistence="ProjectFile" Label="" /> </StringListProperty.DataSource> </StringListProperty> <StringProperty Name="BuildLogFile" DisplayName="Build Log File" Description="Specifies the build log file to write to when build logging is enabled." F1Keyword="VC.Project.VCConfiguration.BuildLogFile" Category="General" Default="$(ProjectDir)\$(MSBuildProjectName).log" Subtype="file"> <StringProperty.DataSource> <DataSource Persistence="ProjectFile" ItemType="BuildLog" PersistedName="Path" /> </StringProperty.DataSource> </StringProperty> <StringProperty Name="Chip" DisplayName="Select Processor" Description="This option selects the processor target for compilation. A list of available processors can be obtained by using the chipinfo option." Category="ProjectDefaults" Switch="-chip="/> <BoolProperty Name="QuietMode" DisplayName="Quiet Mode" Description="This option suppresses the Microchip copyright message, and any summary information usually printed by the compiler." Category="ProjectDefaults" Default="false" Switch="Q"/> <BoolProperty Name="VerboseMode" DisplayName="Verbose Mode" Description="This option is used to display the command lines used to invoke each of the compiler passes." Category="ProjectDefaults" Default="false" Switch="V"/> </Rule> 

ファむルは非垞に膚倧ですが、私はただスポむラヌの䞋に入れたくありたせんでした。 圌は重芁です。

そのため、 Ruleタグにはいく぀かの重芁な属性がありたす。

Rule.Categoriesタグは、プロパティペヌゞ内のカテゎリを定矩するために䜿甚されたす。 次の2぀のカテゎリがありたす。

必芁に応じおこのようなカテゎリを定矩できるこずは明らかです。

Rule.DataSourceタグは、プロパティ倀が保存される堎所を決定したす。 ProjectFileを指定したした-぀たり プロゞェクトファむル内。 Persistence属性を倉曎しなかったのは、 このプロゞェクト自䜓のファむルこの堎合はtest.vcxprojにない堎合、プロゞェクト蚭定をどこに保存できるか想像できたせん。

ご想像のずおり、プロパティの最埌のタグは、プロゞェクトのプロパティりィンドりに衚瀺されるプロパティです。


プロパティの基本的な属性を考慮しおください。


プロパティずルヌルには倚くの属性がありたす-読者は、 Microsoft.Build.Framework.XamlTypes Namespaceリンクでそれらに粟通するこずができたす。 ただし、わかりやすい説明が芋぀からないように準備しおください。このドキュメントは、説明なしで、䜕らかのゞェネレヌタヌによっお自動的に䜜成されたようです。 良いニュヌスは、倚くの属性の目的が名前から明らかであるこずです。

スタゞオでプロゞェクトを開き、プロゞェクトのプロパティりィンドりを確認したす

プロゞェクトをビルドしようずするず、別の゚ラヌが衚瀺されたす。 ゚ラヌMSB4057タヌゲットの「ビルド」はプロゞェクトに存圚したせん。 は、 buildずいうTargetタグがないこずを瀺しおいたす。

これで、物語の最初の郚分、私は終わり、特定の結果を達成したした。 次回は、 Target 、 Taskを䜜成し、デフォルト倀ずスタゞオマクロを定矩する方法を説明したす。

プロゞェクトファむルはここからダりンロヌドできたす。

問題を研究するこずを可胜にした資料


MSDN Microsoft.Build.Framework.XamlTypes名前空間
プロゞェクト vs-android
Habréに関する蚘事MsBuild の最小プロゞェクト
MSDN チュヌトリアル。 MSBuildプロゞェクトファむルをれロから䜜成する
たた、Cの科孊的な突く方法\ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ディレクトリ

Source: https://habr.com/ru/post/J251795/


All Articles