Manifest to Code

清单到代码工具是一个控制台应用程序,它获取 Visual Studio 映像服务的 .imagemanifest 文件,并生成包装文件或文件,用于引用 Visual Studio 扩展的 C++、C#、VB 或 .vsct 文件中的图像清单值。 此工具生成包装文件,这些文件可用于直接从 Visual Studio 图像服务请求图像,或者如果代码不处理任何自己的 UI 和呈现,则通过 API 传递清单值。

如何使用该工具

语法

ManifestToCode /manifest:<Image Manifest 文件> /language:<Code Language><Optional Args>

参数

开关名称 说明 必需或可选
/清单 用于创建或更新代码包装器的映像清单的路径。 必须
/语言 要在其中生成代码包装器的语言。

有效值:CPP、C++、CS、CSharp、C#、VB 或 VSCT 这些值不区分大小写。

对于 VSCT 语言选项,将忽略 /monikerClass、/classAccess 和 /namespace 选项。
必须
/imageIdClass imageIdClass 的名称以及该工具创建的关联文件。 对于 C++ 语言选项,仅生成 .h 文件。

默认值: <清单路径>\MyImageIds。<Lang Ext>
可选
/monikerClass 名字对象类的名称和工具创建的关联文件的名称。 对于 C++ 语言选项,仅生成 .h 文件。 VSCT 语言将忽略此项。

默认值: <清单路径>\MyMonikers。<Lang Ext>
可选
/classAccess imageIdClass 和 monikerClass 的访问修饰符。 确保访问修饰符对给定语言有效。 VSCT 语言选项将忽略此项。

默认值:公共
可选
/命名 空间 在代码包装器中定义的命名空间。 VSCT 语言选项将忽略此项。 无论选择的语言选项如何,“.”或“:”都是有效的命名空间分隔符。

默认值:MyImages
可选
/noLogo 设置此标志会停止打印产品和版权信息。 可选
/? 打印出帮助信息。 可选
/help 打印出帮助信息。 可选

示例

  • ManifestToCode /manifest:D:\MyManifest.imagemanifest /language:CSharp

  • ManifestToCode /manifest:D:\MyManifest.imagemanifest /language:C++ /namespace:My::Namespace /imageIdClass:MyImageIds /monikerClass:MyMonikers /classAccess:friend

  • ManifestToCode /manifest:D:\MyManifest.imagemanifest /language:VSCT /imageIdClass:MyImageIds

说明

  • 建议将此工具与清单从资源工具生成的映像清单一起使用。

  • 该工具仅查看用于生成代码包装器的符号条目。 如果映像清单不包含符号,则生成的代码包装器将为空。 如果映像清单中有一组不使用符号的图像或图像,则它们将被从代码包装器中排除。

示例输出

C# 包装器

适用于 C# 的一对简单图像 ID 和图像名字对象类将类似于以下代码:

//-----------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by the ManifestToCode tool.
//     Tool Version: 14.0.15198
// </auto-generated>
//-----------------------------------------------------------------------------

using System;

namespace MyImages
{
    public static class MyImageIds
    {
        public static readonly Guid AssetsGuid = new Guid("{442d8739-efde-46a4-8f29-e3a1e5e7f8b4}");

        public const int MyImage1 = 0;
        public const int MyImage2 = 1;
    }
}
//-----------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by the ManifestToCode tool.
//     Tool Version: 14.0.15198
// </auto-generated>
//-----------------------------------------------------------------------------

using Microsoft.VisualStudio.Imaging.Interop;

namespace MyImages
{
    public static class MyMonikers
    {
        public static ImageMoniker MyImage1 { get { return new ImageMoniker { Guid = MyImageIds.AssetsGuid, Id = MyImageIds.MyImage1 }; } }
        public static ImageMoniker MyImage2 { get { return new ImageMoniker { Guid = MyImageIds.AssetsGuid, Id = MyImageIds.MyImage2 }; } }
    }
}

C++ 包装器

适用于 C++ 的一对简单图像 ID 和图像名字对象类将类似于以下代码:

//-----------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by the ManifestToCode tool.
//     Tool Version: 14.0.15198
// </auto-generated>
//-----------------------------------------------------------------------------

#pragma once

#include <guiddef.h>

namespace MyImages {

class MyImageIds {
public:

    static const GUID AssetsGuid;

    static const int MyImage1 = 0;
    static const int MyImage2 = 1;

};

__declspec(selectany) const GUID MyImageIds::AssetsGuid = {0x442d8739,0xefde,0x46a4,{0x8f,0x29,0xe3,0xa1,0xe5,0xe7,0xf8,0xb4}};

}
//-----------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by the ManifestToCode tool.
//     Tool Version: 14.0.15198
// </auto-generated>
//-----------------------------------------------------------------------------

#pragma once

#include "ImageParameters140.h"
#include "MyImageIds.h"

namespace MyImages {

class MyMonikers {
public:

    static const ImageMoniker MyImage1;
    static const ImageMoniker MyImage2;

};

__declspec(selectany) const ImageMoniker MyMonikers::MyImage1 = { MyImageIds::AssetsGuid, MyImageIds::MyImage1 };
__declspec(selectany) const ImageMoniker MyMonikers::MyImage2 = { MyImageIds::AssetsGuid, MyImageIds::MyImage2 };

}

Visual Basic 包装器

Visual Basic 的一对简单图像 ID 和图像名字对象类将类似于以下代码:

' -----------------------------------------------------------------------------
'  <auto-generated>
'      This code was generated by the ManifestToCode tool.
'      Tool Version: 14.0.15198
'  </auto-generated>
' -----------------------------------------------------------------------------

Imports System

Namespace MyImages

    Public Module MyImageIds

        Public Shared ReadOnly AssetsGuid As Guid = New Guid("{442d8739-efde-46a4-8f29-e3a1e5e7f8b4}")

        Public Const MyImage1 As Integer = 0
        Public Const MyImage2 As Integer = 1

    End Module

End Namespace
' -----------------------------------------------------------------------------
'  <auto-generated>
'      This code was generated by the ManifestToCode tool.
'      Tool Version: 14.0.15198
'  </auto-generated>
' -----------------------------------------------------------------------------

Imports Microsoft.VisualStudio.Imaging.Interop

Namespace MyImages

    Public Module MyMonikers

        Public Readonly Property MyImage1
            Get
                Return New ImageMoniker With {.Guid = MyImageIds.AssetsGuid, .Id = MyImageIds.MyImage1}
            End Get
        End Property

        Public Readonly Property MyImage2
            Get
                Return New ImageMoniker With {.Guid = MyImageIds.AssetsGuid, .Id = MyImageIds.MyImage2}
            End Get
        End Property

    End Module

End Namespace

VSCT 包装器

.vsct 文件的一组映像 ID 如下所示:

<?xml version='1.0' encoding='utf-8'?>
<!--
- [auto-generated]
     This code was generated by the ManifestToCode tool.
     Tool Version: 14.0.15198
- [/auto-generated]
-->
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable">
  <Symbols>
    <GuidSymbol name="AssetsGuid" value="{442d8739-efde-46a4-8f29-e3a1e5e7f8b4}">
      <IDSymbol name="MyImage1" value="0" />
      <IDSymbol name="MyImage2" value="1" />
    </GuidSymbol>
  </Symbols>
</CommandTable>