我有一个为 sharepoint 2007 构建的事件处理程序功能,并通过将 DLL 移动到 GAC 并在必要的文件夹中创建 Feature.xml 和 Elements.xml 然后使用 stsadm 命令安装它们来进行部署。我希望避免做这一切,而是有一个 WSP 文件,我可以运行它来在生产环境中自动安装该功能。
谢谢
我有一个为 sharepoint 2007 构建的事件处理程序功能,并通过将 DLL 移动到 GAC 并在必要的文件夹中创建 Feature.xml 和 Elements.xml 然后使用 stsadm 命令安装它们来进行部署。我希望避免做这一切,而是有一个 WSP 文件,我可以运行它来在生产环境中自动安装该功能。
谢谢
以下是我将如何继续将您的非托管项目转换为 Visual Studio 2010 中的托管解决方案包:
创建一个“空 SharePoint 项目”。
设置部署目标。在解决方案资源管理器中,单击项目节点并查看“属性”窗格。将Assembly Deployment Target属性设置在GlobalAssemblyCache
和之间WebApplication
。在这种情况下,我们将其保留为默认值GlobalAssemblyCache
。
另请注意,还有一个名为Include Assembly In Package的方便属性。这用于从输出包中排除您的默认项目程序集。你为什么需要这个?如果您的项目不包含代码:例如,您只是捆绑了一些第三方 DLL 以进行部署。
替换您的 SharePoint DLL 引用。按照Adam Macaulay 的文章中的步骤删除 v14 DLL 并重新添加 v12 DLL。
添加一个事件接收器项目。右键单击您的项目并指向Add > New Item...并选择“Event Receiver”。给事件接收器一个正确的名称,然后单击Add。
配置事件接收器。Visual Studio 将连接到您的 (2010) SharePoint 实例,然后通过向导提示您引导您完成要处理的事件和项目类型。最终结果是您的解决方案中的一个事件接收器项,其中包含一个覆盖正确方法的存根类,以及一个Elements.xml
经过适当配置的文件。如果您已经拥有这两个文件,则您实际上不需要“如实”完成向导...只需选择第一个选项,单击“完成”并让 Visual Studio 创建事件接收器和相应的功能。
添加您的代码逻辑。在解决方案资源管理器中,展开您的事件接收器节点以显示.CS
类和相应的Elements.xml
. 将现有文件的内容复制到这些位置。
配置包功能。在解决方案资源管理器中,展开“功能”节点并找到默认功能 ( Feature1.feature
)。这是在您添加事件接收器项目时创建的。为了清楚起见,将该功能重命名为符合逻辑的名称,然后双击它以在设计模式下打开该功能。您应该会看到您的事件接收器已添加到最右侧的窗格(“功能中的项目”)。如果还有其他人,您可以有选择地从功能中添加/删除项目。这是您在Farm
// Site
/之间设置功能范围的地方Web
。WebApplication
同样重要的是,在功能设计器中,请注意“属性”窗格有大量附加选项可以设置在功能上。这些无法在任何其他地方访问,因此请牢记在哪里可以找到它们。
最后,如果您单击设计器底部的Manifest选项卡,您可以预览功能清单的外观。如果需要,可以手动编辑清单(有效地禁用设计器),但我还没有找到我需要做的事情,我无法通过属性进行配置。
配置整体包。在解决方案资源管理器中,展开“包”节点并找到默认包 ( Package.package
)。就像功能一样,双击包以设计模式打开它。这与功能使用的 UI 相同,允许您选择哪些功能将成为此包的一部分。您的事件接收器功能应该已经添加到最右侧的窗格(“包中的项目”)。
同样,与功能相同,当您处于包设计模式时,“属性”窗格将提供某些无法在其他地方编辑的属性。最值得注意的是,您应该在这里清除SharePoint Product Version中的值。
此外,我们可以通过屏幕底部的Manifest选项卡使用相同的清单预览。这对于检查SafeControl
条目(如果需要)等内容非常方便。该Assembly
条目应反映在GlobalAssemblyCache
项目中设置的正确部署目标(在本例中)。
最后,高级选项卡允许您为包指定其他程序集/SafeControl
条目,如果您将其他 DLL 捆绑到默认项目 DLL,这将很有帮助。
构建您的项目。显然我们要确保它可以编译!
测试部署。当我测试时,我首先部署到我的 2010 实例(因为它很方便)并仔细检查所有内容是否已按预期安装:DLL 在正确的位置(BIN/GAC),Web.config
创建了适当的条目,功能安装在正确的范围内, 功能正确激活等。
打包解决方案。指向您的Build > Package菜单项。WSP 将放置在活动配置的相应输出文件夹中。测试部署到您的 SharePoint 2007 实例。
查看Adam Macaulay 编写的“使用 Visual Studio 2010 可视 Web 部件项目构建 SharePoint 2007 Web 部件” 。当我想做同样的事情时,我将其用作参考,并且该方法效果很好。我已经成功地将我们的许多 Visual Studio 2008 项目转换为 2010 项目,同时保持与 SharePoint 2007 环境的兼容性。
我将提出一个建议:如果您的 Web 部件不是绝对需要可视化设计器(即您的 Web 部件的输出是以编程方式生成的),那么使用可视化 Web 部件模板会为您的解决方案添加额外的“垃圾”,而我不喜欢。
相反,在第 1 步中创建一个“空 SharePoint 项目”,然后在解决方案资源管理器中右键单击您的项目并指向添加 > 新项目...并选择“Web 部件”(而不是“可视 Web 部件”)。您最终不会使用 ASCX 控件,并且您可以忽略 Adam 教程中处理更新Register
声明的部分。
这还具有预先捕获 Web 部件文件的正确名称的额外好处,因此您不必重命名一堆“VisualWebPart1xxx”文件。