.net - 是否必须在 GAC 中安装 SharePoint 事件接​​收器,如果是,所有相关程序集也必须安装?

标签 .net sharepoint

我的公司发布了一个产品,它在 SPLists 上注册 SharePoint EventReceiver,监控更改。我一直在 GAC 中注册它,它运行得很好。但是,我们的一位客户对我们在 GAC 中安装的程序集表示不满,并希望我们将二进制文件移动到 SharePoint BIN 目录,并执行该方案工作所需的其他安全/信任伏都教。

当我尝试注册不在 GAC 中的事件接收器时,我收到非常具体的异常,其消息为:“事件接收器程序集不在 GAC 中。”我将此解释为 SharePoint 要求在 GAC 中安装事件接收器。此外,我在 MSDN 上找到了这个:http://msdn.microsoft.com/en-us/library/ff407965.aspx :“事件接收器和处理事件”部分说明

SharePoint Foundation event handlers are a compiled module of custom managed code whose invocation is triggered by a specified event that you have specified. Event handler code is compiled into a .dll file and deployed to the GAC.



这再次暗示但并未完全说明 GAC 安装是必需的。是否有人确切知道这个问题的答案,以便我可以回到客户那里解释我们的 GAC 要求?

现在的后续问题是:如果我在 GAC 中有一个程序集,并且我“静态链接”到其他程序集——即我没有使用 Assembly.Load() 显式地动态加载它们——那么那些其他程序集也必须驻留在 GAC 中?

最佳答案

事件接收器程序集不能仅安装在“bin”中,因为这样 .net 框架无法找到它们。

当您的程序集从“b​​in”加载时,这是因为程序集加载器使用探测来定位程序集。首先在 GAC 中查找,然后在当前工作目录下查找名为“bin”的目录。

因此,您用于运行 Web 界面的所有代码 - ASPX 页面、Web 服务等的代码隐藏都可以放在 inetpub..../bin 中,因为您的 Web 应用程序的工作目录在那里。

但是,工作流和计划的“计时器作业”由 OWSTIMER.exe(一种 Windows 服务)执行。作为典型的 Windows 服务,它的工作目录位于 c:\windows 中。

这意味着,如果您将程序集放在 inetpub...\bin 中的某个位置,则 owstimer 将找不到它。

因此,必须将事件处理程序等共享程序集部署到 GAC。

关于.net - 是否必须在 GAC 中安装 SharePoint 事件接​​收器,如果是,所有相关程序集也必须安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621468/

相关文章:

c# - 如何检测用户何时使用 .NET (C#) 登录系统?

.net - 为什么在 .NET 应用程序中如此多地使用接口(interface)?

arrays - 如何更有效地在 Angular 应用程序中合并 REST 调用结果

javascript - 如何使 ExecuteQueryAsync 的行为更加同步?

javascript - 使用javascript在两个aspx页面之间传递数据

c# - 计算二维有符号距离场

c# - 延长查询超时时间

.net - 如何配置asp.net进程在域帐户下运行?

reactjs - SharePoint 框架中的 Office 结构 : how to disable icon warnings?

sharepoint - 哪些任务是编程自动化工具永远无法完成的?