我们有一个由WSP文件部署的SharePoint计时器作业。该作业由SharePoint功能安装,其dll位于GAC上。 每个其他SharePoint自定义都由另一个WSP文件进行部署,该文件位于SharePoint Site的bin文件夹中,而不是GAC上。
SharePoint计时器作业由服务Windows SharePoint Services计时器(OWSTIMER.EXE)执行,并且没有任何http或SharePoint上下文。
如果作业有任何外部参考,我们也必须将每个引用的dll放在GAC上。但是,我们无法这样做,因为服务器策略不允许GAC部署除了作业dll之外的任何其他内容...
然后,我们的团队手动复制并粘贴将被引用的代码并将其放入作业项目中并构建一个巨大的唯一dll。这种复制过程引起了各种麻烦,因为有时代码在工作中变得不同步。然而,复制从来都不是一件美好的事情,我们知道当我们死的时候我们会直接下地狱。
是否可以部署作业而无需在gac上部署其引用? 或者是否可以将引用的dll合并到一个唯一的dll中? 或者,如果其他一切都失败了,那么可以构建项目,以便在编译时复制引用的代码吗?
谢谢你的进步。
答案 0 :(得分:3)
真正的问题是您的服务器管理员全面禁止GAC部署除了作业DLL之外的任何其他内容。没有考虑其影响,没有什么比政策更好;)
对此的乐队援助是ILMerge。
ILMerge是一个可以使用的实用程序 将多个.NET程序集合并到 一个组件。 ILMerge需要一套 输入程序集并合并它们 进入一个目标组件。
这将允许您将作业程序集和所有依赖程序集合并到一个超级作业程序集中进行部署 - 比手动复制和粘贴代码要好得多。此外,您可以在后置步骤中执行此操作,因此它们都内置于您的构建过程中。
答案 1 :(得分:-1)
为什么不能将引用的dll放在bin目录中?当然可以。