Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
对于那些一直使用 Visual Studio 2010 开发 SharePoint 2010 解决方案的人,他们可能已经注意到处理自定义声明提供程序时有一个简单的打包功能可以使用。 在 Visual Studio 2010 中,您可以创建新功能,并且可以轻松地向它添加功能事件接收器:只需右键单击功能并选择“添加事件接收器”菜单即可。 这样很方便,因为可以非常轻松而高效地处理解决方案编码而不是配置。 问题来了,因为添加的事件接收器默认情况下继承自 SPFeatureReceiver。 我相信你们都知道,用于注册自定义声明提供程序的事件接收器必须继承自 SPClaimProviderFeatureReceiver (https://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx(该链接可能指向英文页面))。 此外,通过 Visual Studio 中的内置 SharePoint 智能组件,可以非常直观地向 SharePoint 2010 项目中添加一个类,然后将它与功能相关联。 不过,解决此问题有一个相当简单而灵活的方法。
不久前,在我像往常那样开始时我顺着这条思路走下去 – 我编写了一个自定义声明提供程序以及用于安装该程序的相应的功能接收器。 这两个类是一个项目的组成部分。 我确定我确实希望能够有效地利用 Visual Studio 2010 中新增的功能打包特性,下面是我的操作方法。
1. 完成自定义声明提供程序项目和用于注册的相应事件接收器的首次运行,然后进行编译。 您需要查看编译的程序集并获取程序集的强名称以及事件接收器的类名称。
2. 向解决方案添加新项目,并且以 SharePoint 2010“空白 SharePoint 项目”模板为基础。 配置项目以部署为场解决方案。
3. 右键单击项目中的“功能”节点,并选择“添加功能”。 您的功能的范围应该为“服务器场”,并且应该自动激活。 或者,根据您正尝试执行的操作配置功能属性。 下面是要点 – 根据下面所述的方法配置功能的这两个属性(在 Visual Studio 的“属性”窗口中):
a. 接收器程序集: 设置为在步骤 1 中描述的程序集的强名称,例如 MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701
b. 接收器类: 设置为您在步骤 1 中为自定义声明提供程序编写的类的名称,例如 MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver
4. 将编译的自定义声明提供程序程序集添加到打包解决方案要部署的程序集列表中。 为此,请双击 Visual Studio 打包项目中的“Package.package”节点。 单击“高级”选项卡。 单击“添加”按钮,然后单击“添加现有程序集”菜单。 查找编译的自定义声明提供程序程序集的正确位置,并保持“部署目标: GlobalAssemblyCache”处于选定状态(这是默认设置)。 单击“确定”按钮以保存更改,然后可以关闭“包属性”窗口。 此处要注意一个问题 – 我通常在打包项目中创建一个文件夹,并将其他项目要随解决方案分发的已编译程序集复制到该文件夹中。 配置包中的其他程序集时,我只需从打包项目的该文件夹中选择。 在我的其他项目中有一个生成后脚本,该脚本自动将已编译程序集复制到打包项目的此程序集文件夹中。 复制程序集(无论是调试生成还是发布生成)以便我无须每次都记得自己复制的生成后脚本只包含一行代码。 它类似于下面的内容:
copy "$(TargetPath)" ..\..\..\MyPackagingProject\GacFiles /Y
您的包现已完成。 您只需编译包项目,然后从项目的右键单击菜单中选择“包”菜单。 最终,您将得到一个 WSP 文件,随后您可以分发该文件并让它自动部署自定义声明提供程序。
这是一篇本地化的博客文章。请访问 Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project 以查看原文