将SharePoint事件接收器程序集部署到Web应用程序BIN

时间:2009-12-14 16:01:18

标签: sharepoint sharepoint-2007 sharepoint-feature

是否可以成功将包含事件处理程序的程序集部署到Web应用程序的bin而不是GAC中,从而将自定义SharePoint列表功能(因此,依赖于Microsoft.SharePoint程序集的类)的事件处理程序部署?

这样做的选项肯定会出现在我的功能的manifest.xml文件中的XML标记中。但是,我已经看到几个为程序集部署CAS策略的引用是必须的,几乎没有指示如何成功实现这一需要权限的程序集,如访问SharePoint对象模型。我也看到讨论表明,由于CAS的困难/问题,GAC几乎是一个要求。

我已经能够将程序集实际部署到该文件夹​​。然而,安全问题是一个很大的障碍。我能够让我的程序集运行的唯一方法(而不是简单地用异常错误)是将web.config的信任级别提升到<trust level="Full" originUrl="">,这在我的环境中不会飞。我希望在继续与CAS进行进一步斗争之前验证我正在尝试做的事情。

如果可以,如果有人有指导或资源可以帮助我修改我的功能以这种方式部署我的事件处理程序,我会很感激。

3 个答案:

答案 0 :(得分:1)

不要提升web.config的信任级别 - 这是一个非常大的问题。您必须在WSP中打包自定义CAS策略,以便为您的程序集授予web.config赋予它的更高权限。

-Oisin

答案 1 :(得分:1)

解决此问题的一种方法是启动日志记录,记录引发的各种异常,然后手动编写CAS策略。这是一种非常概率化的方法,而且非常痛苦。

预先知道任何给定方法或类的所有权限要求都是可能的。如果是这样,应该可以编写一个工具来静态分析代码和依赖程序集,并编写所需的CAS文件。不幸的是,我不知道有任何工具可以做到这一点。

对于它的价值,GAC的装配似乎比提升信任级别“更轻”。

答案 2 :(得分:1)

如果我的问题正确,您希望将列表事件接收器部署到Web应用程序的BIN目录。

这在SharePoint 2010中是不可能的,但我不知道它是否在MOSS 2007上受支持(我猜它也不受支持)。

此行为是设计使然,因为SharePoint内部使用System.Reflection.Assembly.Load()方法来加载事件接收器程序集。 Load()方法仅适用于完全限定的程序集名称,因此需要程序集驻留在全局程序集缓存中。