Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 扩展Visual Studio(2010+;)项类型处理程序_C++_Visual Studio_Custom Build - Fatal编程技术网

C++ 扩展Visual Studio(2010+;)项类型处理程序

C++ 扩展Visual Studio(2010+;)项类型处理程序,c++,visual-studio,custom-build,C++,Visual Studio,Custom Build,在Visual Studio(2010及更高版本)中查看文件属性时,可以在“常规”部分中设置项类型。例如,对于C++,项目类型是“C/C++编译器”。 有一个“自定义构建工具”类型可用,但必须为属于该类别的每个文件完全配置它 我的问题是: 是否有办法配置“自定义构建工具”并使其在项目类型列表中可用 然后是否可以将文件扩展名与此新项目类型生成器关联 我通过以下参考资料找到了答案: 在VS中集成编译器/汇编程序;将NASM与Visual Studio 2010结合使用 平台扩展性-第1部分由Pav

在Visual Studio(2010及更高版本)中查看文件属性时,可以在“常规”部分中设置项类型。例如,对于C++,项目类型是“C/C++编译器”。 有一个“自定义构建工具”类型可用,但必须为属于该类别的每个文件完全配置它

我的问题是:

  • 是否有办法配置“自定义构建工具”并使其在项目类型列表中可用
  • 然后是否可以将文件扩展名与此新项目类型生成器关联

  • 我通过以下参考资料找到了答案:

    • 在VS中集成编译器/汇编程序;将NASM与Visual Studio 2010结合使用
    • 平台扩展性-第1部分由Pavan Adharapurapu在MSDN博客上发表:
    • 平台扩展性-第2部分由Pavan Adharapurapu在MSDN博客上发表:
    • MSDN上的MSBuild API参考:
    事实证明,完整的设置是相当复杂的,因此我将用最简单的步骤来回答我的两个初始问题:

    在MSVC中添加自定义生成工具的步骤
  • 在项目文件(
    vcxproj
    )中,包含一个新的构建定义(可能有一种方法可以在系统范围内包含它,但我还没有研究它):

  • 此目标文件引用了一个包含更多详细信息的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.xml
    中添加一个条目来实现的,如下所示:

     <FileExtension Name="*.myext" ContentType="MYBUILD" />
    
     <ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
    
        <?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>
    
        <ItemGroup>
          <PropertyPageSchema
                Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
          <AvailableItemName Include="MYBUILD">
            <Targets>_MYBUILD</Targets>
          </AvailableItemName>
        </ItemGroup>
    
    我们刚才所做的:VisualStudio现在知道扩展名
    .myext
    包含类型为
    MYBUILD
    的数据。它还知道内容类型为
    MYBUILD
    的文件是类型为
    MYBUILD
    的项。在Visual Studio中重新打开项目后,添加扩展名为
    .myext
    的文件时,Visual Studio将自动将这些文件的项类型设置为“我的自定义生成”

    在自定义项MSVC上执行自定义工具的步骤 此时,我们有一个与自定义项类型关联的文件扩展名。我们需要将该项类型与一组生成规则相关联

  • 将项类型与生成目标关联。在
    mybuild.targets
    中,在与PropertyPageSchema相同的项目组中添加以下内容:

     <AvailableItemName Include="MYBUILD">
       <Targets>_MYBUILD</Targets>
     </AvailableItemName>
    
  • 我们的命令行只会打开一个资源管理器窗口

  • 声明自定义生成任务。这正好位于上一步的
    目标之后:

     <Target Name="_MYBUILD">
         <MYBUILD CommandLineTemplate="explorer $(IntDir)"></MYBUILD>
     </Target>
    
     <UsingTask TaskName="MYBUILD" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
         <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
     </UsingTask>
    
  • 我们刚刚做的是:我们将自定义项类型映射到自定义目标,以及打开资源管理器窗口的自定义构建任务。当我们构建
    .myext
    文件时,我们现在可以期望VisualStudio弹出一个资源管理器窗口

    自定义构建
    有几种方法可以在属性窗口中添加配置字段,将它们映射到变量,并使用它们来配置任务。此处未介绍这一点,但在顶部提供的链接中进行了讨论。

    在VS 2008及以下版本中,右键单击项目时有一个“自定义生成规则”菜单项。我不知道它是否仍然存在于VS2010中,并且现在无法访问它进行测试。
     <Target Name="_MYBUILD">
         <MYBUILD CommandLineTemplate="explorer $(IntDir)"></MYBUILD>
     </Target>
    
     <UsingTask TaskName="MYBUILD" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
         <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
     </UsingTask>
    
     <Rule Name="MYBUILD" PageTemplate="tool" DisplayName="My Custom Build" Order="200"/>