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

lan*_*nce 8 deployment assembly-resolution wsp sharepoint-2010 feature-receivers

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

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

"Package"命令现在生成一个包,其中包含我的项目的DLL文件(正如您所期望的那样 - 添加一个功能接收器不应该改变这一点).

然而,当我调试,生成的包并没有包括我的项目的DLL文件,并部署努力失败,出现以下错误:

部署步骤"添加解决方案"发生错误:无法为功能"ABC_XYZ功能"加载接收器程序集"ABC,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 2377fad544a7c307"(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'in System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection)在System.Reflection.Assembly.Asombly.Load的System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark&stackMark,Boolean forIntrospection)中的System.Reflection.Assembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark&stackMark,Boolean forIntrospection) (字符串assemblyString)在Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

警告:装配绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.注意:程序集绑定失败日志记录会导致一些性能损失.要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog].

删除功能接收器允许我再次调试没有问题,但一旦我重新添加功能接收器问题就会返回.

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

当我使用"Package"命令时,为什么我的项目程序集被包含在包中,而不是当我使用"Start Debugging"命令时,并且添加功能接收器会导致这种情况发生?

Jay*_*Jay 19

这个问题的公认答案对我不起作用.

以下工作:

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

感谢这篇博文:农场解决方案部署问题


lan*_*nce 14

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

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