2010-12-17 79 views
1

我们有一个由WSP文件部署的SharePoint计时器作业。作业由SharePoint功能安装,其dll放在GAC上。 每个其他SharePoint自定义功能都由另一个位于SharePoint网站的bin文件夹中的WSP文件进行部署,而不是在GAC上进行部署。部署没有添加引用的Sharepoint时间作业GAC

SharePoint计时器作业由服务Windows SharePoint Services计时器(OWSTIMER.EXE)执行,并且没有任何http或SharePoint上下文。

如果作业有任何外部参考,我们必须将每个引用的dll放在GAC上。但是,我们不能这样做,因为服务器策略不允许别的工作DLL旁边GAC部署 ...

然后,我们的团队手动复制和粘贴,将引用的代码并把它放在工作项目的内部,并建立一个巨大的独特的DLL。这种复制过程造成了各种麻烦,因为有时代码在工作内部变得不同步。尽管如此,复制永远不是一件美丽的事情,我们知道当我们因为它而死的时候,我们会直接下地狱。

是否可以部署该作业而不在gac上部署其引用? 或者是否有可能合并引用的DLL内一个独特的DLL? 或者如果一切都失败了,那么可以构建项目以便在编译时复制引用的代码?

谢谢您的高级。

回答

-1

为什么无法将引用的dll放在bin目录中?它当然可以。

+2

作业由Windows SharePoint Services计时器启动,而不是由SharePoint网站启动。因为这项工作需要部署在GAC上。 – 2010-12-17 18:32:34

3

真正的问题是您的服务器管理员对作业DLL以外的任何其他部分禁止GAC部署。没有考虑到影响,没有任何政策;)

乐队对此的帮助是ILMerge

ILMerge是可用于 到多个.NET组件合并成 单个组件的实用程序。 ILMerge获取输入组件的集合 ,并将它们合并到一个目标程序集中。

这将允许您将作业程序集和所有相关程序集合并为一个超级作业程序集进行部署 - 比手动复制和粘贴代码要好得多。另外,你可以在后期制作步骤中完成它,以便将它全部内置到构建过程中。

+2

我永远都不会惊讶于善意的政策多久会导致一些可怕的代码 – Basic 2010-12-18 14:49:25

+0

呵呵 - 即使它的精神被完全践踏,这封信的多少次也得到维护。 – Ryan 2010-12-18 14:57:08

+0

谢谢,我们将尝试ILMerge,但是肯定它看起来是一个很好的解决方案。客户的部署政策是一团糟,我们因此无法做很多事情。就好像Sharepoint本身不是一个需求地狱...... – 2010-12-19 12:39:36