3

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

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

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

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

4

3 回答 3

1

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

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

对于它的价值,GAC'ing 你的程序集似乎比提高信任级别“轻松”得多。

于 2009-12-16T00:07:11.177 回答
1

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

-Oisin

于 2009-12-15T02:34:49.740 回答
1

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

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

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

于 2011-09-28T07:42:19.600 回答