SPItemEventReceiver和其他程序集中的代码

时间:2013-08-28 13:20:48

标签: c# sharepoint sharepoint-2010 .net-assembly gac

我的解决方案中有四个项目:

  1. 类库,(。NET 3.5)名为Common.dll
  2. 名为 SharePointStrucutre 的SharePoint项目,具有列表定义。
  3. 包含SharePoint作业的SharePoint项目。
  4. 它们都在两个软件包中引用Common.dll

    4个带有WebPart的SharePoint项目。我无法使用Common.dll,即使我已将其添加到web.config中的SafeControl部分 - WebPart只是给我消息:此类型不安全且无法导入。所以我最终只是将代码从Common.dll复制到第四个项目。 (跛脚!)

    最糟糕的是,在我的本地设置中,一切正常(WebPart正在添加没有任何类型安全的消息,EventReceiver工作正常)。只有在我部署到live系统时才会出现问题。

    问题: 在项目 SharePointStrucutre 中,我有SPItemEventReceiver,它执行Common.dll代码。它失败了! 例外:

    System.IO.FileNotFoundException: Could not load file or assembly 'Common, Version=1.0.0.9, 
    Culture=neutral, PublicKeyToken=0dbfee127d760dde' or one of its dependencies. The system cannot find 
    the file specified.
    File name: 'Common, Version=1.0.0.9, Culture=neutral, PublicKeyToken=0dbfee127d760dde'
    

    我已经检查了GAC,这个程序集在那里,所有部署都很好。

    问题:

    1. 分离SharePoint项目和拥有公共库是一个正确的决定吗?在我将它作为一个项目之前,它会导致升级问题并破坏已创建的列表。
    2. 如何以正确的方式引用dll?所以我不会有这种例外
    3. 重要更新

      在我的 SharePointStrucutre 中,我有代码(HttpModule),它在Common.dll上进行中继,并且可以正常工作。仅在列表事件接收器中出现问题。只有在那里我得到dll无法加载的消息。

      我将不胜感激。

      谢谢

1 个答案:

答案 0 :(得分:1)

一次出现一个问题。让我们尝试修复安全控制。

通常这个错误只是因为你需要签署项目。所以......

  1. 删除您复制的所有代码以解决此问题
  2. 从解决方案窗格中选择类库项目(常用)
  3. 右键单击项目选择属性
  4. 搜索可以对项目进行签名的选项卡。
  5. 您将看到一个下拉列表,其中包含两个新选项或添加现有(或类似内容)。我通常会选择我的sp项目已经使用的密钥,但请自行选择。
  6. 完成后,您可以在任何sp2010项目中使用此库。

    现在,转到你的sharepoint项目,一个带有webpart的项目,添加引用,不会出现任何消​​息。

    最后,但并非最不重要的是,在解决方案窗格中选择包,使用包设计器打开它并选择advance。在这里,您必须通过选择“添加输出程序集”或类似的选项从类库中添加dll。您必须选择将文件部署到GAC的位置。

    我认为所有这些步骤都会让你的问题消失......祝你好运! ;)