我正在研究一种功能上个星期,会将一些事件接收器添加到特定列表实例. (我有点博文在这里该列表接收机).
使用命令行, 我无法安装功能,并没有错误 (但请参阅下面的隐藏错误). 当我试图部署上该网站的功能, MOSS 抱怨"FileNotFoundException" 错误. 此博客条目描述怎么解决的.
这是一个 MOSS 表明我在 web 浏览器中的错误:
功能 ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ 不安装,因为加载的事件接收器大会"xyzzyFeatureReceiver_0" 失败: System.IO.FileNotFoundException: 未能加载文件或程序集 xyzzyFeatureReceiver_0’ 或一个依赖项. 系统无法找到指定的文件.
文件名称: ' xyzzyFeatureReceiver_0’
在 System.Reflection.Assembly.nLoad(进行校验文件名, 字符串代码库, 证据 assemblySecurity, 大会 locationHint, StackCrawlMark& stackMark, 布尔 throwOnFileNotFound, 布尔 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(进行校验 assemblyRef, 证据 assemblySecurity, StackCrawlMark& stackMark, 布尔 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(字符串 assemblyString, 证据 assemblySecurity, StackCrawlMark& stackMark, 布尔 forIntrospection)
在 System.Reflection.Assembly.Load(字符串 assemblyString)
在 Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
警告: 程序集绑定日志记录打开关闭.
要启用程序集绑定失败日志记录, 设置注册表值 [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD 值) 自 1.
请注意: 有一些与程序集绑定失败日志记录相关联的性能.
若要关闭此功能, 删除注册表值 [HKLMSoftwareMicrosoftFusion!EnableLog].
我知道如何去故意导致该错误: 不在 gac 中安装程序集. 但, 它是在 gac 中. 我通常将程序集安装到 gac 中通过将它们拖入 c:\使用 windows 资源管理器的 windowsassembly 文件夹. 我从来 100% 舒适这样做,因为我总是以为那 gacutil 存在的原因 … 所以我试过了. 它没有区别.
互联网中搜索的结果,并找到这篇帖子: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
海报碰巧使用同一根位的代码 (从内部 WSS 书从该列表中) 所以这是一个充满希望的迹象. 不过, 装饰与大会的建议 [程序集: ] 指令对我没有意义. 不管怎样,我还是把它尝试,右. 它没有区别.
然后我注意到我的类定义是不公开. 我将它公开并无差异.
下一步, 我去了启用"程序集绑定失败日志的麻烦" (提供的帮助和最准确的说明) 这是在哪里,事情开始变得有趣. 该日志显示我运行时到处搜索,该服务器上为我的程序集. 它甚至似乎在寻找它在我的药柜. 但 … 它不会在 GAC 中搜索它.
我穿上我冬季夹克和去再次搜索互联网,发现有人也有这问题. 在这个帖子中的冗长讨论彼得斯掉到什么和我找不到解决方案.
我将我的程序集移动到日志声称它搜索并多一点进步的地方之一. 一个新的错误,在浏览器中尝试激活该功能时我得到现在工作:
未能从程序集"xyzzyFeatureReceiver_0"创建功能接收器对象, 键入"Conchango.xyzzyFeatureReceiver" 为功能 b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: 值不能为空.
参数名称: 类型
在 System.Activator.CreateInstance(类型类型, 布尔非公开)
在 System.Activator.CreateInstance(类型类型)
在 Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
一个最后一次去互联网的时间!
这一次找出, 不出所料, 苔藓发出此错误,因为程序集不是 GAC 中.
我想要得到的东西正从这并尝试感到有点骄傲的了 Fugitive MSIL 程序集, 但它不工作. 我只是平原恼火. 我发现自己喃喃自语"鸡还是先有蛋" 根据我的呼吸.
我最后决定平底船. 我创建一个完全新的项目和复制/粘贴到这个新项目从 incredible-cloaked-from-the-GAC-assembly 非工作项目在代码. (我寻找称为"隐藏从程序集绑定如果安装到 GAC 中像一个生成标志" 但找不到一个).
安装功能,并将其激活, … 它的工作原理! 所以, 所有这一切之后, 我基本上已经到 ' 重新启动’ 我的项目. 这是为什么我讨厌的计算机的另一个原因.
我确实学到一些有用的这. 以前安装过整天都使用 stsadm 命令行功能和已使用"-力" 出于习惯选项. 因为某些原因, 我没有使用-force 选项,当你安装了新的项目. 这一次, 我做的其实, 真正忘了将这个新项目的程序集复制到 gac 中. 结果, 我收到了"FielNotFoundException" 错误. 这一次, 得从 stsadm, 没有,当我试着激活通过 web 浏览器功能. 所以, -力事实上是扮演两个角色. 它允许您重新安装现有的功能. 它还允许您将不能工作在运行时通过抑制错误越野功能安装. 它可能表示尽可能帮助地方但永远不会注意到了它.
</结束>