如何:创建 SharePoint 命令
若要在 SharePoint 工具扩展中使用服务器对象模型,必须创建自定义 SharePoint 命令以调用 API。 在可直接调入服务器对象模型的程序集中定义 SharePoint 命令。
有关 SharePoint 命令的用途的更多信息,请参见调入 SharePoint 对象模型。
创建 SharePoint 命令
创建一个具有以下配置的类库项目:
以 .NET Framework 3.5 为目标。 有关选择目标框架的更多信息,请参见如何:面向特定的 .NET Framework 版本或配置文件。
以 AnyCPU 或 x64 平台为目标。 默认情况下,类库项目的目标平台是 AnyCPU。 有关选择目标平台的更多信息,请参见如何:针对特定的 CPU 类型对应用程序进行优化。
提示
无法在定义 SharePoint 工具扩展的相同项目中实现 SharePoint 命令,因为 SharePoint 命令面向 .NET Framework 3.5,而 SharePoint 工具扩展面向 .NET Framework 4。 必须在单独的项目中定义由您的扩展使用的任何 SharePoint 命令。 有关更多信息,请参见在 Visual Studio 中部署 SharePoint 工具扩展。
添加对下列程序集的引用:
Microsoft.VisualStudio.SharePoint.Commands
Microsoft.SharePoint
在项目的类中,创建一个定义 SharePoint 命令的方法。 该方法必须符合下列准则:
该方法可以具有一个或两个参数。
第一个参数必须是 ISharePointCommandContext 对象。 此对象提供要在其中执行所定义的命令的 Microsoft.SharePoint.SPSite 或 Microsoft.SharePoint.SPWeb。 此对象还提供可用于将消息写入到 Visual Studio 中的**“输出”窗口或“错误列表”**窗口的 ISharePointCommandLogger 对象。
第二个参数可以是您选择的类型,但此参数是可选的。 如果您需要将 SharePoint 工具扩展中的数据传递给 SharePoint 命令,则可以将此参数添加到该命令中。
该方法还可以具有一个返回值,但此值是可选的。
第二个参数和返回值必须属于可由 Windows Communication Foundation (WCF) 序列化的类型。 有关更多信息,请参见Types Supported by the Data Contract Serializer和Using the XmlSerializer Class。
该方法可以具有任何可见性(public、internal 或 private),并且它可以是静态的也可以是非静态的。
将 SharePointCommandAttribute 应用于该方法。 此特性指定命令的唯一标识符;此标识符不必与方法名匹配。
当从 SharePoint 工具扩展调用该命令时,必须指定相同的唯一标识符。 有关更多信息,请参见如何:执行 SharePoint 命令。
示例
下面的代码示例演示一个标识符为 Contoso.Commands.UpgradeSolution 的 SharePoint 命令。 此命令使用服务器对象模型中的 API 来升级到部署的解决方案。
<SharePointCommand("Contoso.Commands.UpgradeSolution")> _
Private Sub UpgradeSolution(ByVal context As ISharePointCommandContext, ByVal fullWspPath As String)
Dim solution As SPSolution = SPFarm.Local.Solutions(Path.GetFileName(fullWspPath))
If solution Is Nothing Then
Throw New InvalidOperationException("The solution has not been deployed.")
End If
solution.Upgrade(fullWspPath)
End Sub
[SharePointCommand("Contoso.Commands.UpgradeSolution")]
private void UpgradeSolution(ISharePointCommandContext context, string fullWspPath)
{
SPSolution solution = SPFarm.Local.Solutions[Path.GetFileName(fullWspPath)];
if (solution == null)
{
throw new InvalidOperationException("The solution has not been deployed.");
}
solution.Upgrade(fullWspPath);
}
除第一个隐式 ISharePointCommandContext 参数外,此命令还具有一个自定义字符串参数,该参数包含要升级到 SharePoint 网站的 .wsp 文件的完整路径。 若要在一个更大的示例上下文中查看此代码,请参见演练:为 SharePoint 项目创建自定义部署步骤。
编译代码
此示例需要对以下程序集的引用:
Microsoft.VisualStudio.SharePoint.Commands
Microsoft.SharePoint
部署命令
若要部署命令,请将相应的命令程序集与使用该命令的扩展程序集一起包括在同一 Visual Studio 扩展 (VSIX) 包中。 还必须在 extension.vsixmanifest 文件中为该命令程序集添加一个条目。 有关更多信息,请参见在 Visual Studio 中部署 SharePoint 工具扩展。