从现有的 SharePoint 网站导入项

利用“导入 SharePoint 解决方案包”项目模板,你可以在新的 Visual Studio SharePoint 解决方案中重用现有 SharePoint 网站中的元素,例如,内容类型和字段。 虽然无需修改即可运行大多数导入的解决方案,但需要考虑一些限制和问题,尤其是在导入任何项后对这些项进行修改的情况下。

注意

若要导入可重用工作流,请使用“导入可重用工作流”项目模板。 有关详细信息,请参阅导入可重用工作流的指南

支持的 SharePoint 解决方案

Visual Studio 2012 完全支持导入在 SharePoint Foundation 和 SharePoint Server 中创建的解决方案。

Visual Studio 2012 不支持导入在以下应用程序中创建的解决方案:

  • Windows SharePoint Services 3.0

  • Microsoft Office SharePoint Server 2007

  • Visual Studio 2008

  • Microsoft SharePoint Designer 2007

  • Visual Studio 2010

    虽然通常可以成功导入由这些应用程序创建的解决方案,但该功能未经测试且不受支持。

项导入限制

尽管可以从现有 .wsp 文件中导入大多数 SharePoint 项,但以下各项是不受支持的,可能需要进行修改才能使它们正确工作:

  • BDC 实体

  • 代码工作流关联元素

  • 代码工作流

  • 可视 Web 部件 (.ascx)

  • Web 服务 (.asmx)

  • 内容类型绑定

  • 事件接收器

  • 列表定义(模板)

  • 网站定义

    从 SharePoint Foundation 或 SharePoint Server 导出解决方案时,将自动从 .wsp 文件中排除这些项。 但是,由不受支持的工具生成的其他 .wsp 文件可能会包含这些项。 (请参阅本主题前面的“支持的 SharePoint 解决方案”。)

导入解决方案时出现的情况

在使用“导入 SharePoint 解决方案包”模板导入解决方案时,Visual Studio 将复制 .wsp 文件的全部内容,并尝试尽可能多地协调和保留已导入元素与其文件之间的关联和引用。

所有导入的项将复制到“解决方案资源管理器” 中对应的文件夹。 例如,内容类型出现在“内容类型” 文件夹下,列表实例出现在“列表实例” 下。 与导入的项关联的文件也将复制到该项的文件夹中。 例如,导入的列表实例包括其模块、窗体和 ASPX 页。

依赖项

如果在“导入 SharePoint 解决方案包”向导中选择某一项,但没有选择其依赖项,则将显示一个消息框,通知你导入之前还必须选择相应的依赖项。

什么是功能?

SharePoint Designer 用户可能会在解决方案资源管理器的导入解决方案中看到意外的文件(称为功能)。尽管 SharePoint Designer 解决方案中存在功能,但它们在视图中是隐藏的。 现在,功能在 Visual Studio 中是可见的。

功能是包含 SharePoint 项的容器。 每个功能都会保留对它所包含的每个项(如内容类型和列表定义)的引用。 在导入解决方案时,Visual Studio 将设置所有导入元素的功能,并尝试保留这些文件的功能与元素间的关系。 所有未能解析其引用的文件都将置于“其他已导入文件” 文件夹中。

有关功能的详细信息,请参阅开发 SharePoint 解决方案使用功能

处理特殊情况

在某些情况下,Visual Studio 无法协调项及其依赖文件。 所有 Visual Studio 未能解析的文件都将出现在“其他已导入文件”文件夹下。 此外,这些文件的“DeploymentType” 属性将设置为“NoDeployment” ,以便它们不会随解决方案一起部署。

例如,如果导入列表定义 ExpenseForms,则具有此名称的列表定义将与其 Elements.xml 和 Schema.xml 文件一起出现在“解决方案资源管理器”中的“列表定义”文件夹下 。 但其关联的 ASPX 和 HTML 窗体可能会放置在“其他已导入文件” 文件夹下的名为“ExpenseForms” 的文件夹中。 若要完成此导入,请在“解决方案资源管理器” 中的 ExpenseForms 列表定义下移动这些文件,并将每个文件的“DeploymentType” 属性从“NoDeployment” 更改为“ElementFile”

在导入事件接收器时,Elements.xml 文件将会复制到正确位置,但必须手动将程序集包含在解决方案包中,以使其随解决方案一起部署。 有关如何执行此操作的详细信息,请参阅操作说明:添加和移除其他程序集

在导入工作流时,InfoPath 窗体将会复制到“其他已导入文件” 文件夹中。 如果 .wsp 文件包含 Web 模板,则将该文件设置为“解决方案资源管理器”中的启动页。

导入字段和属性包

在导入具有多个字段的解决方案时,所有单独的字段定义将合并到一个 Elements.xml 文件中,此文件位于“解决方案资源管理器”中一个名为“字段”的节点下 。 同样,所有属性包项将合并到一个 Elements.xml 文件中,此文件位于一个名为“PropertyBags”的节点下。

SharePoint 中的字段是指定数据类型(如文本、布尔值或查阅)的列。 有关详细信息,请参阅 生成块:列和字段类型。 利用属性包,可以向 SharePoint 中的对象(从场到 SharePoint 网站上的列表的所有内容)添加属性。 属性包将作为属性名和属性值的哈希表实现。 有关详细信息,请参阅 管理 SharePoint 配置SharePoint 属性包设置

删除项目中的项

SharePoint 解决方案中的大多数项都具有一个或多个依赖项。 例如,列表实例依赖于内容类型,而内容类型依赖于字段。 导入 SharePoint 解决方案后,如果你删除此解决方案中的某个项而不删除其依赖项,则在你尝试部署解决方案之前,Visual Studio 不会告知你任何引用问题。 例如,如果导入的解决方案具有的列表实例依赖某个内容类型,而你删除了该内容类型,则在部署时可能会出现错误。 如果 SharePoint 服务器中不存在此依赖项,则会发生错误。 同样,如果删除的项也具有关联的属性包,则从 PropertyBags Elements.xml 文件中删除这些属性包项。 因此,如果从导入的解决方案中删除任何项,并且存在部署错误,则应检查是否还需要删除任何依赖项。

还原缺少的功能属性

在导入解决方案时,将从导入的功能清单中略去一些可选的功能属性。 如果需要在新的功能文件中还原这些属性,请通过以下方式标识缺少的属性:将原始功能文件与新的功能清单进行比较,并按照主题如何:自定义 SharePoint 功能中的说明进行操作。

不对内置列表实例执行部署冲突检测

Visual Studio 不对内置列表实例(即,SharePoint 附带的默认列表实例)执行部署冲突检测。 不执行冲突检测是为了避免覆盖 SharePoint 上的内置列表实例。 仍将部署或更新内置列表实例,但不会对其进行删除或覆盖。 有关详细信息,请参阅 SharePoint 打包和部署疑难解答

导入 SharePoint Server 2010 工作流

如果导入在 SharePoint Server 中创建的工作流,则此工作流在部署后将不会正确运行。 此工作流无法正确运行的原因是,缺少某些程序集且 SharePoint Server 工作流包含 Visual Studio 工作流解决方案目前不支持的 InfoPath 窗体。 不过,在修复一些项后(如添加对 SharePoint Server 程序集的引用并重新连接 InfoPath 窗体),可以使已导入的 SharePoint Server 工作流正确工作。 有关详细信息,请参阅导入 SharePoint Server 2010 工作流

项名称字符限制

Visual Studio 将项目和项目项名称(包括路径)限制为总共 260 个字符。 在导入解决方案时,如果项名称超出此限制,则会收到错误:

指定的路径和/或文件名太长。 完全限定文件名必须少于 260 个字符,而目录名必须少于 248 个字符。

若收到此错误,则不会创建相应的项。 导入的模块最常出现此问题。 若要避免此问题,请执行下列操作:

  • 在“添加新项目” 对话框中输入项目名称时,请使用项目的短名称。

  • 在尽可能接近根文件夹的位置创建项目,以便减小路径长度。

SharePointProductVersion 属性

如果导入在早期版本的 SharePoint(如 Windows SharePoint Services 3.0 或 Microsoft Office SharePoint Server 2007)中创建的解决方案,请将包清单中的 SharePointProductVersion 属性值更改为 12.0,或将脚本管理器控件插入到所有导入的网页中并将 SharePointProductVersion 属性值保持为 14.0。 否则,导入的 Web 窗体将不会显示在 SharePoint 中。

背景

SharePoint Foundation 和 SharePoint Server 中的解决方案包括一个名为 SharePointProductVersion 的属性。 SharePoint 在其包清单中使用此属性来确定为其设计解决方案的 SharePoint 的版本。 两个有效值为 12.0 和 14.0。 值为 12.0 表示该项目设计用于 Windows SharePoint Services 3.0 或 Microsoft Office SharePoint Server 2007;值为 14.0 表示该项目设计用于 SharePoint Foundation 或 SharePoint Server。

为了在呈现 ASPX 页时增强安全性,SharePoint Foundation 和 SharePoint Server 要求所有 ASPX 页或母版页包含脚本管理器控件。 有关脚本管理器的详细信息,请参阅 ScriptManager 控件概述。 由于脚本管理器控件在 Windows SharePoint Services 3.0 和 Microsoft Office SharePoint Server 2007 中不可用,因此必须将脚本管理器控件添加到升级到 SharePoint Foundation 或 SharePoint Server 的任何 Windows SharePoint Services 3.0 或 Microsoft Office SharePoint Server 2007 页面。 使用标准母版页的 ASPX 页不需要脚本管理器控件,因为已向标准母版页中添加了一个脚本管理器控件。 但是,未使用母版页的 ASPX 页或使用自定义母版页的 ASPX 页必须添加脚本控件,以便在 SharePoint Foundation 或 SharePoint Server 中工作。

将 Windows SharePoint Services 3.0 或 Microsoft Office SharePoint Server 2007 项目导入到 Visual Studio 2010 中时,缺少脚本管理器控件可能会导致出现问题,因为所有新项目的 SharePointProductVersion 属性都被设置为 14.0。 如果部署的已升级项目具有一个不带脚本管理器的 Web 窗体,则该窗体将不会在 SharePoint 中显示。

另请参阅