Gas*_*rdP 7 c++ custom-build visual-studio
在Visual Studio(2010及更高版本)中查看文件的属性时,可以在"常规"部分中设置"项类型".例如,对于C++,项类型是"C/C++编译器".
有一个"自定义构建工具"类型可用,但必须为属于该类别的每个文件完全配置.
我的问题是:
Gas*_*rdP 10
我使用以下参考资料找到答案:
Integrating a compiler/assembler in VS ; Using NASM with Visual Studio 2010by byilbrain on CodeProject:http://www.codeproject.com/Articles/410776/Integrating-a-compiler-assembler-in-VS-Using-NASMPlatform Extensibility - Part 1作者:Pavan Adharapurapu在MSDN博客上:http://blogs.msdn.com/b/vsproject/archive/2009/06/10/platform-extensibility-part-1.aspxPlatform Extensibility - Part 2作者:Pavan Adharapurapu,MSDN博客:http://blogs.msdn.com/b/vsproject/archive/2009/06/18/platform-extensibility-part-2.aspxMSBuild API Reference在MSDN上:https://msdn.microsoft.com/en-us/library/dn715758(v = vs.121) .aspx`事实证明,完整的设置非常复杂,所以我将限制我的回答,用极简主义的步骤来回答我的两个初始问题:
在项目文件(vcxproj)中,包含一个新的构建定义(可能有一种方法可以在系统范围内包含它,但我还没有考虑过它):
<ImportGroup Label="ExtensionTargets">
<Import Project="mybuild.targets" />
</ImportGroup>
这可以在结束前进行</Project>.
创建一个mybuild.targets与文件位于同一文件夹中的vcxproj文本文件.
将以下内容插入mybuild.targets:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema 
        Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
  </ItemGroup>
</Project>
此目标文件是指包含更多详细信息的xml文件($(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml在此示例中引用mybuild.xml).创造mybuild.xml.
将以下内容插入mybuild.xml:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <ItemType Name="MYBUILD" DisplayName="My Custom Build" />
</ProjectSchemaDefinitions>
我们刚刚做了什么:项目文件现在包含一个新的目标定义(mybuild.targets).此文件通常包含有关如何执行实际构建的更多信息,但此处它仅包含mybuild.xml文件的包含.此mybuild.xml文件包含使用内部名称MYBUILD和显示名称调用的新项类型定义My Custom Build.在Visual Studio中重新打开项目时,"项目类型"列表中将提供新项类型.选择它会将此项目的类型设置为MYBUILD,因为此时我们没有为该类型项目定义规则,所以只会从构建中忽略它.
这分两步完成:
将文件扩展名与内容类型相关联.这是通过添加如下条目来完成的mybuild.xml:
<FileExtension Name="*.myext" ContentType="MYBUILD" />
将内容类型与项类型相关联.这是通过添加如下条目来完成的mybuild.xml:
<ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
此时,mybuild.xml看起来像这样:
    <?xml version="1.0" encoding="utf-8"?>
    <ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          xmlns:sys="clr-namespace:System;assembly=mscorlib">
      <ItemType Name="MYBUILD" DisplayName="My Custom Build" />
      <FileExtension Name="*.hh" ContentType="MYBUILD" />
      <ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
    </ProjectSchemaDefinitions>
我们刚刚做了什么:Visual Studio现在知道扩展.myext包含类型的数据MYBUILD.它还知道具有类型内容的文件是类型MYBUILD的项目MYBUILD.在Visual Studio中重新打开项目后,在添加带扩展名的文件时.myext,Visual Studio会自动将项目类型设置为这些文件的"我的自定义构建".
此时,我们有一个与自定义项类型相关联的文件扩展名.我们需要将该项类型与一组构建规则相关联.
将项类型与构建目标相关联.在mybuild.targets与PropertyPageSchema相同的ItemGroup中添加以下内容:
<AvailableItemName Include="MYBUILD">
  <Targets>_MYBUILD</Targets>
</AvailableItemName>
所以它现在看起来像这样:
    <ItemGroup>
      <PropertyPageSchema
            Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
      <AvailableItemName Include="MYBUILD">
        <Targets>_MYBUILD</Targets>
      </AvailableItemName>
    </ItemGroup>
定义自定义目标.您可以在此处映射应用于配置构建任务的所有属性和变量.在下一步中,我们将使用使用命令行模板的构建任务,因此在我们的目标中,我们将配置实际的命令行.这正好ItemGroup在上一步中定义的下方:
<Target Name="_MYBUILD">
    <MYBUILD CommandLineTemplate="explorer $(IntDir)"></MYBUILD>
</Target>
我们的命令行将只打开一个资源管理器窗口.
声明自定义构建任务.这是Target在上一步之后:
<UsingTask TaskName="MYBUILD" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
    <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
这里,我们引用将在我们的mybuild.xml文件中定义的任务.
在mybuild.xml,添加以下规则:
<Rule Name="MYBUILD" PageTemplate="tool" DisplayName="My Custom Build" Order="200"/>
我们刚刚做了什么:我们将自定义项类型映射到自定义目标,以及打开资源管理器窗口的自定义构建任务.当我们构建.myext文件时,我们现在可以期望Visual Studio弹出一个资源管理器窗口.
有一些方法可以在属性窗口中添加配置字段,将它们映射到变量并使用它们来配置任务.这里没有涉及,但在顶部提供的链接中进行了讨论.
| 归档时间: | 
 | 
| 查看次数: | 1400 次 | 
| 最近记录: |