调试时为什么我的项目组件在包中丢失了?

时间:2012-04-17 17:19:17

标签: deployment sharepoint-2010 assembly-resolution wsp feature-receivers

我有一个SharePoint项目,我已经调试了一段时间没有问题。

今天我在项目的唯一功能中添加了一个功能接收器。我还没有改变Visual Studio默认添加的空接收器类。

“Package”命令现在生成一个包含我的项目DLL文件的包(正如您所期望的那样 - 添加一个功能接收器不应该改变任何内容)。

但是,当我调试时,生成的包包含我的项目的DLL文件,部署工作失败并出现以下错误:

  

部署步骤“添加解决方案”发生错误:无法加载   接收器组件“ABC,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = 2377fad544a7c307“for feature”ABC_XYZ Feature“(ID:   dca34989-a2f2-413b-b5c4-958e0bbb84ef):   System.IO.FileNotFoundException:无法加载文件或程序集'ABC,   Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 2377fad544a7c307'或   其中一个依赖项。该系统找不到指定的文件。   文件名:'ABC,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = 2377fad544a7c307'at   System.Reflection.Assembly._nLoad(AssemblyName fileName,String   codeBase,Evidence assemblySecurity,Assembly locationHint,   StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean   forIntrospection)at   System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,   证据集合安全,StackCrawlMark& stackMark,布尔   forRetrospection)在System.Reflection.Assembly.InternalLoad(String   assemblyString,Evidence assemblySecurity,StackCrawlMark& stackMark,   System.Reflection.Assembly.Load上的Boolean forIntrospection(String   assemblyString)at   Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

     

警告:装配绑定日志记录已关闭。要启用程序集绑定   失败日志记录,设置注册表值   [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1.注意:有   与程序集绑定失败相关的一些性能损失   日志记录。要关闭此功能,请删除注册表值   [HKLM \ SOFTWARE \微软\融合!EnableLog]。

删除功能接收器允许我再次调试而不会出现问题,但是一旦我重新添加功能接收器就会返回问题。

我已经尝试过清理和重建,然后进行调试,但除非/直到我删除功能接收器,否则错误不会消失。

当我使用“Package”命令时,为什么我的项目程序集会包含在程序包中,但是当我使用“Start Debugging”命令时,为什么这样做呢?那么添加功能接收器会导致这种情况发生?

3 个答案:

答案 0 :(得分:19)

这个问题的接受答案对我不起作用。

以下工作:

  

...简单地更改项目的强键组装在这种特殊情况下工作。如果您之前没有必要更改它,那么它属于项目的属性 - >签名。在“选择强名称密钥文件”下,选择“新建”。密码是可选的。

感谢此博文:Farm Solution Deployment Problems

答案 1 :(得分:14)

我不知道是什么导致它发生,但当我手动清除我的obj和bin目录时,问题就消失了。以下是我从问题中引用的状态到使用功能接收器成功调试的步骤:

  1. 删除功能接收器
  2. 清洁解决方案
  3. 关闭Visual Studio
  4. 在Windows资源管理器中删除SharePoint项目的obj文件夹
  5. 在Windows资源管理器中删除SharePoint项目的bin文件夹
  6. 打开Visual Studio并重新添加功能接收器
  7. 开始调试

答案 2 :(得分:1)

我尝试在Visual Studio中右键单击解决方案 - 属性。 在应用程序,程序集信息,然后我提出程序集和文件版本“最小1”(从1.0.0.0到1.0.0.1)。 然后就可以将“(并主要激活功能)解决方案”部署到WebApplication中