为什么我调试时项目的程序集在打包后丢失?

8
我有一个SharePoint项目,已经调试了一段时间而没有问题。
今天我向该项目的唯一功能添加了一个特性接收器。我还没有改变Visual Studio默认添加的空接收器类。
“Package”命令现在生成一个包,其中包括我的项目的DLL文件(正如您所期望的那样 - 添加一个特性接收器不应该改变这个)。
然而,在我进行调试时,生成的包不包括我的项目的DLL文件,并且部署失败,出现以下错误:
“Add Solution”部署步骤中发生错误: 无法为特性“ABC_XYZ Feature”(ID: dca34989-a2f2-413b-b5c4-958e0bbb84ef)加载接收器程序集“ABC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2377fad544a7c307”: System.IO.FileNotFoundException: 找不到文件或程序集“ABC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2377fad544a7c307”的指定文件。 文件名:'ABC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2377fad544a7c307' 在System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) 在System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 在System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 在System.Reflection.Assembly.Load(String assemblyString) 在Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
当我删除特性接收器时,我可以再次无问题地进行调试,但是只要我重新添加特性接收器,问题就会再次出现。
我尝试了清理和重建,然后进行调试,但是除非/直到我删除特性接收器,否则错误不会消失。
为什么使用“Package”命令时我的项目程序集被包含在包中,但使用“开始调试”命令时却没有,添加特性接收器会导致这种情况发生?
3个回答

20

对于这个问题,被接受的答案对我没有用。

以下内容可行:

...在这种情况下,简单地更换项目的强名称程序集即可解决问题。如果您以前没有更改过它,请在项目的属性 -> 签名下进行操作。在“选择强名称密钥文件”下,选择“新建”。密码是可选的。

感谢这篇博客文章:Farm Solution Deployment Problems


接受的方法对我也没用,但新的密钥解决方案解决了问题。谢谢,Jay! - Sergey

14

我不知道是什么原因导致了这个问题,但是当我手动清空了我的 obj 和 bin 目录时,问题就消失了。以下是我遵循的步骤,从提问中引述的状态到成功调试使用功能接收器:

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

+1,因为尽管毫无逻辑,但这确实有效。怎么办?这个部分能被编辑掉吗?(我意识到让Visual Studio运行会立即重新生成obj文件夹。) - user1499731
1
我创建了这个答案,因为我不明白它为什么有效,这是一次疑难解答的努力,我希望永远不要重复。如果我发现其中任何部分都是不必要的,我一定会进行编辑。 - lance

1

我试图在 Visual Studio 中右键单击解决方案 - 属性。 在应用程序下,程序集信息,然后我将程序集和文件版本提高了“至少1”(从1.0.0.0到1.0.0.1)。 然后就可以部署(主要是激活功能)“到Web应用程序”中的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接