【问题标题】:How to deploy a feature to Web Application level如何将功能部署到 Web 应用程序级别
【发布时间】:2013-11-15 18:16:43
【问题描述】:

我有一个 SharePoint 2013 解决方案项目(内置于 VS2013),其中包含一个设置为 WebApplication 级别的功能,其中一个事件接收器根本没有代码(仅用于测试目的)。

当我将该功能的默认激活属性设置为 true 并部署它时,该功能似乎已被激活,但 ULS 显示以下错误(我用点替换了实际的程序集/文件名):

ArgumentException:无法为功能“........”加载接收器程序集“........” .....”(ID:5e6fc154-bc0d-4768-a558-8d4d8227d92e)。:System.IO.FileNotFoundException:无法加载文件或程序集'...... .' 或其依赖项之一。系统找不到指定的文件。

当我尝试停用它时,我得到了同样的错误。当我将默认时激活属性设置为 false 时,当我尝试手动激活它时会出现同样的错误。

我尝试了以下方法但没有成功:

  • 重新启动 IIS 和计时器服务

  • 将项目的 Assembly Deployment Target 属性设置为 WebApplication 和 GlobalAssemblyCache

我要做的就是在 Web 应用程序级别部署我的功能并让事件接收器运行并能够成功激活/停用该功能。

非常感谢您的帮助。

问候

【问题讨论】:

  • 如果您在项目中引用任何程序集,您需要将其包括在 GAC 中部署。您在项目中引用的程序集列表是什么?
  • 感谢您的回复路易斯。我没有使用任何非 OOB 程序集。我在事件接收器后面的代码中使用这些: using Microsoft.SharePoint;使用 Microsoft.SharePoint.Administration;使用 Microsoft.SharePoint.Publishing.Navigation;使用 Microsoft.SharePoint.Taxonomy;使用系统;使用 System.Linq;使用 System.Runtime.InteropServices;
  • 这很奇怪...您可以浏览您的 GAC 并确保所有这些程序集都在那里...同时确保在您的配置中您的项目平台设置为 AnyCPU 或 x64
  • Luis,请阅读我对您的回复的回答。我不能在这里发表很长的评论。

标签: sharepoint-2010 sharepoint-2013


【解决方案1】:

我设法解决了我的问题。

经过大量研究后,我了解到,如果 Web 应用程序级功能包含事件接收器,则该程序集必须部署到 GAC。但是,这将导致 SharePoint 全局部署 wsp 包。但我想将包部署到特定的 Web 应用程序。所以我进入包设计窗口,进入高级选项卡,通过选择“从项目输出添加程序集”选项将程序集添加到程序包中,输入其详细信息并选择“GlobalAssemblyCache”选项。最后,我选择了该项目并在其属性窗口中将“Include Assembly In Package”属性设置为 False。 (如果不这样做VS编译时会报错)

这导致 SharePoint 通过 VS 自动将包部署到我的 Web 应用程序(或者在通过 Central Admin UI 部署时它会要求您选择一个 Web 应用程序)。

令人惊讶的是,它仍然给了我同样的错误(无法加载接收器组件...)。但在收回、清洁和另一次部署之后,它奏效了! (有时,您可能需要执行额外的操作,例如重新启动 SharePoint 计时器服务、重新启动 IIS、关闭和打开 VS 或重新启动事件才能使其正常工作)

感谢所有对我的问题发表评论的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多