如何:创建软件开发套件

软件开发工具包 (SDK) 是 Visual Studio 视为唯一引用项目文件的集合。引用管理器 对话框的列表与项目相关的调用 引用管理器 对话框的所有 SDKs。当您添加一个 SDK 到项目时,所有目录通过 IntelliSense、工具箱、设计器、对象浏览器、生成、部署,调试和打包可用。

具有 SDKs 的两种类型:

  • 平台 SDK 是开发的 apps 的强制的元素平台的。例如,需要 Windows 8 SDK 开发 Windows 应用商店 apps。

  • 扩展 SDKs 是扩展平台的可选组件,但对于该平台中开发 apps 不是必需的。

以下各节介绍 SDKs 泛型基础结构以及如何创建平台 SDK 和扩展 SDK。

  • 目标平台标记

  • 平台 SDK

  • 扩展 SDKs

目标平台标记

Visual Studio 2012 支持两个新属性:

  1. 目标平台标识符 (TPI):此属性的有效值包括您可以开发软件的各种平台。窗口是平台的示例。

  2. 目标平台版本 (TPV):此特性标识目标平台的版本。例如,对于 Windows 8,TPV 是 8.0,因此,TPI 是窗口。

同时,这两个特性构成目标平台标记 (TPM),窗体引用基础结构的 Windows 8 和 SDK 的基础。例如,Windows 8 的 TPM 是“窗口中,version=8.0”。

平台 SDK

需要平台 SDK 开发平台的 apps。例如,需要 Windows 8 SDK 开发 Windows 8的 apps。

Hh768146.collapse_all(zh-cn,VS.110).gif安装

所有平台 SDK 是安装在 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\@InstallationFolder = [SDK 根]。因此,Windows 8 SDK 安装在 HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0。

Hh768146.collapse_all(zh-cn,VS.110).gif布局

平台 SDK 将具有以下格式:

\[InstallationFolder root]
            SDKManifest.xml
            \References
                  \[config]
                        \[arch]
            \DesignTime
                  \[config]
                        \[arch]

节点

描述

引用文件夹

包含 API 可以代码的二进制文件。这些可以由 windows 元数据 (WinMD) 文件或程序集。

DesignTime 文件夹

包含只需在之前运行/调试时的文件。这些可以包括 XML 文档,库,标头,工具中设计时二进制文件,MSBuild 项目,等

警告说明警告
XML 文档在 \DesignTime 文件夹,在理想情况下,将放置,但是,XML 文档为引用将继续在引用文件放在 Visual Studio 2012。例如,XML 文档为引用 \References\[config]\[arch]\sample.dll 将为 \References\[config]\[arch]\sample.xml,并且,本地化版本该文档将为 \References\[config]\[arch]\[locale]\sample.xml。

配置文件夹

只能有三个文件夹:调试,零售和 CommonConfiguration。SDK 作者可以将自己的文件在 CommonConfiguration 下,如果同一组 SDK 文件应被使用,无论 SDK 使用者将针对的配置。

体系结构文件夹

所支持的任何结构文件夹可能存在。Visual Studio 2012 支持以下结构:x86、x64、ARM 和非。注意:为 x86 的 Win32 映射以及非" AnyCPU "映射。

在 .NET Framework 4.5,MSBuild 是硬编码只查找在 \CommonConfiguration\neutral 平台 SDK。

SDKManifest.xml

此文件描述 Visual Studio 应如何使用 SDK。查看清单的 SDK 为 Windows 8:

<FileList
            DisplayName = “Windows”
            PlatformIdentity = “Windows, version=8.0”
            TargetFramework = “.NET for Windows Store apps, version=v4.5; .NET Framework, version=v4.5”
            MinVSVersion = “11.0”>
            <File Reference = “Windows.winmd”>
               <ToolboxItems VSCategory = “Toolbox.Default” />
            </File>
</FileList>
DisplayName对象浏览器在找不到显示的值列表。
PlatformIdentity此特性中存在的通知 Visual Studio 和 MSBuild SDK 是平台 SDK,引用从它将不应复制局部。
TargetFrameworkVisual Studio 使用此属性可以确保在此属性中指定的值以同一框架只的项目可以使用 SDK。
MinVSVersionVisual Studio 使用此属性使用应用于它只的 SDK。
引用必须为包含控件的那些指定此属性引用。有关如何指定引用是否包含控件的信息,请参见下面的。

Hh768146.collapse_all(zh-cn,VS.110).gif在 Visual Studio

引用管理器中查看目标平台标记 (TPM) 然后替换属性值在 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\@InstallFolder = [SDK 根] 查看 Platform SDK 的磁盘位置。引用管理器将然后:

  1. 打开部署清单的 SDK 确定平台 SDK 是否适用于引用管理器调用的 Visual Studio 版本,并且平台 SDK 是否根据调用引用管理器的项目的目标框架适用。如果平台 SDK 适用于两次,引用管理器为枚举平台 SDK 引用选项卡的名称将使用目标平台标识符属性。如果平台 SDK 在磁盘上未找到,选项卡将显示,但是,中间窗格中显示消息“[TPI] SDK 在计算机未找到”。

  2. 枚举所有引用下指定 [InstallFolder 根]\references\CommonConfiguration\neutral 文件夹 [TPI] |核心选项。

并将所有程序集或 WinMD,用户在 Platform SDK 可以添加对它们的项目并使用它们在代码。

扩展 SDKs

扩展 SDKs 扩展平台,但对于该平台的开发的应用程序不是必需的。例如,Bing 地图和 windows live SDKs 扩展 Windows 8,但未由该操作系统的所有开发人员需要。

Hh768146.collapse_all(zh-cn,VS.110).gif安装

扩展 SDKs 可以在四个位置之一将:

  • \Program Files\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs

  • \users\[用户名]\AppData\Local\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs

  • 在为 dir1 和 dir2 标识磁盘上的任何两个位置的 <PropertyGroup><SDKReferenceDirectoryRoot>dir1;dir2</SDKReferenceDirectoryRoot></PropertyGroup> 的项目文件

  • HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs\[SDKName]\[SDKVersion]\@default = [SDK 根],[SDK 根] 的位置是 [SDK 的路径]\[SDKName]\[]\SDKVersion

对于前面三个位置,注册表项不是必需的。可以放置扩展 SDK 在计算机,用户特定或自定义位置,并且,Visual Studio 将采用 SDK。如果这些结构都不适用,可以指定 SDK 的自定义位置使用注册表路径在第四位置。

Hh768146.collapse_all(zh-cn,VS.110).gif布局

扩展 SDKs 将具有以下格式:

\[ExtensionSDKs root]
           \[SDKName]
                 \[SDKVersion]
                        SDKManifest.xml
                        \References
                              \[config]
                                    \[arch]
                        \Redist
                              \[config]
                                    \[arch]
                        \DesignTime
                               \[config]
                                     \[arch]

节点

描述

SDKName\[]\[] SDKVersion

窗体扩展 SDK 的标识。换言之,扩展 SDK 的名称和版本从相应的文件夹名称派生 SDK 根目录的路径。MSBuild 使用此标识查找磁盘上的 SDK 和 Visual Studio 显示在 属性 此窗口标识和引用管理器。

引用文件夹

包含 API 可以代码的二进制文件。这些可以是 windows 元数据 (WinMD) 文件或程序集。

Redist 文件夹

包含对运行时/调试是必需的,并且应获取打包为用户的应用程序一部分的文件。两个规则也适用:

  1. 所有二进制文件应放置在 \redist\[config]\[arch],并且,二进制文件名称应具有确保以下格式的唯一性:[company].[product].[purpose].[extension]。例如,Microsoft.Cpp.Build.dll。

  2. 所有文件的名称可能与文件的名称从其他 SDK (例如,javascript、CSS、pri、XAML、jpg 和 png 文件) 应放置在 \redist\[config]\[arch]\[sdkname]\,但与 XAML 控件的文件除外。这些文件应放置在 \redist\[config]\[arch]componentname。

DesignTime 文件夹

包含作为用户的应用程序的一部分,只需要之前运行/调试时,不要打包的文件。这些可以是 XML 文档,库,标头,工具中设计时二进制文件,MSBuild 项目,等等。

警告说明警告
所有 SDK 供消耗使用由的本机项目必须具有 SDKName.props 文件。下面的代码演示此类文件的示例。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ExecutablePath>C:\Temp\ExecutablePath;$(ExecutablePath)</ExecutablePath>
    <IncludePath>$(FrameworkSDKRoot)\..\v8.0\ExtensionSDKs\cppimagingsdk\1.0\DesignTime\CommonConfiguration\Neutral\include;$(IncludePath)</IncludePath>
    <AssemblyReferencePath>C:\Temp\AssemblyReferencePath;$(AssemblyReferencePath)</AssemblyReferencePath>
    <LibraryPath>$(FrameworkSDKRoot)\..\v8.0\ExtensionSDKs\cppimagingsdk\1.0\DesignTime\Debug\ARM;$(LibraryPath)</LibraryPath>
    <SourcePath>C:\Temp\SourcePath\X64;$(SourcePath)</SourcePath>
    <ExcludePath>C:\Temp\ExcludePath\X64;$(ExcludePath)</ExcludePath>
    <_PropertySheetDisplayName>DevILSDK, 1.0</_PropertySheetDisplayName>
  </PropertyGroup>
</Project>
说明说明
XML 文档在 \DesignTime 文件夹,在理想情况下,将放置,但是,XML 文档为引用将继续在引用文件放在 Visual Studio 2012。例如,XML 文档为引用 \References\[config]\[arch]\sample.dll 将为 \References\[config]\[arch]\sample.xml,并且,本地化版本该文档将为 \References\[config]\[arch]\[locale]\sample.xml。

配置文件夹

只能有三个文件夹:调试,零售和 CommonConfiguration。SDK 作者可以将自己的文件在 CommonConfiguration 下,当应使用时相同的设置 SDK 文件,而不管 SDK 使用者面向的配置。

体系结构文件夹

所支持的任何结构文件夹可能存在。Visual Studio 2012 支持以下结构:x86,x64,ARM,非。为 x86 的 Win32 映射以及非" AnyCPU "映射。

SDKManifest.xml

此文件描述 Visual Studio 应如何使用 SDK。若要查看该清单下面的示例中的 SDK。

<FileList
DisplayName = “My SDK”
ProductFamilyName = “My SDKs”
FrameworkIdentity-Debug = “Name=MySDK.10.Debug, MinVersion=1.0.0.0”
FrameworkIdentity-Retail = “Name=MySDK.10, MinVersion=1.0.0.0”
TargetFramework = “.NETCore, version=v4.5; .NETFramework, version=v4.5”
MinVSVersion = “11.0”
AppliesTo = "WindowsAppContainer + WindowsXAML"
SupportPrefer32Bit = “OS”
SupportedArchitectures = “x86;x64;ARM”
SupportsMultipleVersions = “Error”
AppX-Debug-x86 = “.\AppX\Debug\x86\Microsoft.MySDK.x86.Debug.1.0.appx”
AppX-Debug-x64 = “.\AppX\Debug\x64\Microsoft.MySDK.x64.Debug.1.0.appx”
AppX-Debug-ARM = “.\AppX\Debug\ARM\Microsoft.MySDK.ARM.Debug.1.0.appx”
AppX-Release-x86 = “.\AppX\Retail\x86\Microsoft.MySDK.x86.1.0.appx”
AppX-Release-x64 = “.\AppX\Retail\x64\Microsoft.MySDK.x64.1.0.appx”
AppX-Release-ARM = “.\AppX\Retail\ARM\Microsoft.MySDK.ARM.1.0.appx” 
CopyRedistToSubDirectory = “.”
DependsOn = “SDKB, version=2.0”
MoreInfo = “https://msdn.microsoft.com/MySDK”>
<File Reference = “MySDK.Sprint.winmd” Implementation = “XNASprintImpl.dll”>
<Registration Type = “Flipper” Implementation = “XNASprintFlipperImpl.dll” />
<Registration Type = “Flexer” Implementation = “XNASprintFlexerImpl.dll” />
<ToolboxItems VSCategory = “Toolbox.Default” />
</File>
</FileList>
节点描述
DisplayName显示的值引用管理器、解决方案资源管理器、对象浏览器和其他位置用户界面的 Visual Studio 的。
ProductFamilyName整体 SDK 产品名。例如,Windows JavaScript 库 (WinJS) SDK 将提供了名称“Microsoft.WinJS.1.0”和“Microsoft.WinJS.2.0”的 SDKs,属于 SDK 产品系列的同一系列,“Microsoft.WinJS”。此特性使 Visual Studio 和 MSBuild 生成该连接。如果此属性不存在,SDK 名称用作产品系列的名称。
FrameworkIdentity只适用于 windows 组件库。此属性的值放入清单使用的 app's 指示在一个或多个 windows 组件库的依赖项。
TargetFramework用于的值确定 SDKs 可用的引用管理器和工具框。这可能是分号分隔的列表目标框架标记。如果同一目标 framework 的多个版本指定,引用管理器用于筛选用途是使用最低的指定版本。例如,因此,如果“.NET framework 中,version=v2.0;.NET framework 中,version=v4.0”指定,引用管理器将使用“.NET framework 中,version=v2.0”。如果特定目标 framework 配置文件中指定,因此,只有该配置文件将由引用管理器用于筛选目的。例如,那么,当“Silverlight 中,version=v4.0,profile=WindowsPhone”指定时,引用管理器将只筛选在 windows phone 配置文件;以完整的 Silverlight framework 4.0 的项目不显示在引用管理器中的 SDK。
MinVSVersion用于筛选 SDKs 在每个 Visual Studio 版本显示。
AppliesTo
用于的值确定 SDKs 可在引用管理器通过指定适用的 Visual Studio 项目类型。在 Visual Studio 2012,九个值都识别:WindowsAppContainer、VisualC,CSharp、VB 中,WindowsXAML、JavaScript,管理和本机。SDK 作者可以使用和 (" + "),或者 ("|"),非 (! "") 正确指定范围的运算符应用于 SDK 的项目类型。
说明说明
WindowsAppContainer 标识 Windows 应用商店 apps 的项目。
SupportPrefer32Bit支持的值为“true”和“false”。如果该值设置为“true”,结果是相同的,就象属性未设置;即默认值假定 Prefer32Bit 支持。如果该值设置为“false”,MSBuild 返回 Windows 应用商店 项目中的错误 (或桌面项目的警告),如果引用 SDK 的项目启用的 Prefer32Bit。有关 Prefer32Bit 的更多信息,根据您的编程语言参见以下主题之一,例如:
  1. “项目设计器”->“生成”页 (C#)

  2. “项目设计器”->“编译”页 (Visual Basic) .

SupportedArchitectures分号分隔的列表结构 SDK 支持的属性。如果对使用的项目的目标 SDK 体系结构,不支持 MSBuild 显示警告。如果未指定该特性,MSBuild 从不显示此类警告。
SupportsMultipleVersions如果此特性设置为 错误警告,MSBuild 指示同一项目不能引用同一 SDK 系列的多个版本。如果此属性不存在或未设置为 允许,MSBuild 不显示这种错误或警告。
AppX只适用于 windows 组件库。此特性的值指定路径 app 程序包为 windows 组件库在磁盘,在本地调试期间,并且,路径传递给 windows 组件库的注册该组件。文件名的命名约定为 [] 公司。[产品]。[结构]。[] 配置。[] 版本 .appx。如果它们不适用于 windows 组件库,配置和体系结构是可选的按属性名称和属性值。
CopyRedistToSubDirectorySDK 作者可以确定 \redist 文件夹下面的文件在何处下将复制相对 app 程序包根 (即在创建 App 程序包向导选择的 软件包位置 ) 和运行时格式根。默认位置为 app 程序包和 F5 布局的根。
DependsOndelimited 列表定义 SDKs 此 SDK 依赖的 SDK 标识。此属性将出现在引用管理器的细节窗格中。
MoreInfo包含 URL 提供 SDK 使用者提供指南的网页。此值在引用管理器的右窗格的更多信息。
文件引用必须为这些仅指定此程序集/WinMD 引用包含控件或是注册类型必须指定的本机 WinMD。
注册类型此属性在清单中。app 的指定 WinMD 注册和对于本机 WinMD,需要有重复实现 DLL。
工具箱
下表描述支持的特性。
在工具中的位置SDKManifest.xml 示例 (适用于任何引用– WinMD 或 DLL)
枚举所有控件,并将其置于工具中默认类别。
<File Reference = “sample.winmd”>
                <ToolboxItems VSCategory = “Toolbox.Default”/>     
</File>
枚举所有控件,并将它们以特定类别的名称。
<File Reference = “sample.winmd”>
                <ToolboxItems VSCategory= “MyCategoryName”/>
</File>
枚举特定控件,并将它们以特定类别的名称。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Graph”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems/>
                < ToolboxItems VSCategory = “Data”>
                                <Item Type = “sample.datagrid”/>
                                <Item Type = “sample.dataconnection”/>
                < ToolboxItems />
</File>
枚举特定控件,并将它们以不同的类别名称在组合和 Visual Studio。
// Blend accepts a slightly different structure for the category name because it allows a path rather than a single category.
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Graph” BlendCategory = “Controls/sample/Graph”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
</File>
不同的枚举特定控件在组合和 Visual Studio。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Graph”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                <ToolboxItems/>
                < ToolboxItems BlendCategory = “Controls/sample/Graph”>
                                <Item Type = “sample.piegraph”/>
                <ToolboxItems/>
</File>
枚举特定控件,并且只将它们放在 Visual Studio 常用路径下或任何控件组中。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Toolbox.Common”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
                < ToolboxItems VSCategory = “Toolbox.All”>
                                <Item Type = “sample.datagrid”/>
                                <Item Type = “sample.dataconnection”/>
                < ToolboxItems />
</File>
枚举特定控件,并在 ChooseItems 仅显示特定设置,而无需在工具框。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Toolbox.ChooseItemsOnly”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
</File>

Hh768146.collapse_all(zh-cn,VS.110).gif在 Visual Studio

引用管理器中查看目标平台标记 (TPM) 然后替换属性值在 \Program Files\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs,\users\[用户名]\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs,和 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs\ 查看扩展 SDKs 的磁盘位置。

引用管理器将打开 SDK 清单每个扩展 SDK 确定扩展 SDK 是否适用于引用管理器调用的 Visual Studio 版本,扩展 SDK 是否根据调用引用管理器的目标框架适用的项目,并且,AppliesTo 属性值是否符合调用引用管理器项目系统的播发的功能。如果扩展 SDK 适用于所有计数,引用管理器将显示 DisplayName、版本和 SDK 依赖项根据清单扩展的 SDK 正确然后填写更多信息。

扩展 SDK 显示为引用管理器的条目。一旦添加,显示为 解决方案资源管理器 的单个节点托管 apps 以及窗口生成的 Windows 应用商店 apps 的使用 JavaScript。SDK 将显示为在属性页中的条目 Visual C++ 项目中。用户立即不必执行任何其他操作。用户为 IntelliSense、工具框、设计器、对象浏览器、生成、部署,调试和打包设置。

说明说明
  1. 基于项目以了配置,并体系结构,Visual Studio 中的选取从最特定到最不引用特定。例如,因此,如果目标的 SDK 配置为调试和针对的 SDK 结构为 x86,Visual Studio 将枚举所有引用,从开始\reference commonconfiguration\\无关,然后\reference commonconfiguration\x86,然后 \reference\debug\ 无关,因此,最后\reference\debug\x86。然后它将移除所有少特定副本并将所有引用 IntelliSense 的编译器。选择此方式对 SDK 作者无需的灵活性复制这些文件引用在多个 \configuration\architecture 文件夹下。

  2. 如果依赖于另一个 SDK 的项目引用 SDK,Visual Studio 不会自动使用第二 SDK。用户必须手动添加对第二 SDK。若要帮助用户推导 SDK 依赖项,在引用管理器"对话框,那么,当 SDK 在扩展选项时指定,细节窗格中列出 SDK 的名称和版本和 (如果 SDK 依赖于另一个 SDK) SDK 依赖项的名称。当 SDK 依赖项不足时,MSBuild 返回提示用户添加依赖项的警告。

  3. FrameworkIdentity:Visual Studio 为 FrameworkIdentity-设置 [] [] -曲拱,然后 FrameworkIdentity- [] 设置,然后 FrameworkIdentity- [] 曲拱,然后 FrameworkIdentity 首先查找。如果找到匹配时,它记录匹配的属性的值。

  4. AppX:SDK 解析器尝试选择最具体的 AppX 属性每个体系结构;的降序顺序首选项:AppX-设置 [] -曲拱 [] (或 AppX- [] 设置对于非),然后 AppX- [] 曲拱和最后 AppX。例如,因此,如果 SDK Manifest 指定了以下 AppX 属性:“AppX x86”,“AppX 调试 x86”,“AppX x64”,“AppX ARM”,“AppX ITA”和“AppX”和项目针对调试和 x86、SDK 解析器选取“AppX 调试 x86”,“AppX x64”,“AppX ARM”,“AppX ITA”和“AppX”。

  5. 在引用 SDK 的项目模板,您必须指定 SDK 按以下方式引用:

    <ItemGroup>
    <SDKReference Include="MySDK, Version=1.0">
       <Name>My SDK</Name> 
    </SDKReference>
    </ItemGroup>

请参见

任务

演练:使用 C++ 创建 SDK

演练:使用 C# 创建 SDK

概念

管理项目引用