【问题标题】:SPItemEventReceiver and code in other assemblySPItemEventReceiver 和其他程序集中的代码
【发布时间】:2013-08-28 13:20:47
【问题描述】:

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

  1. 类库,(.NET 3.5) 称为 Common.dll
  2. 名为SharePointStrucutre 的SharePoint 项目具有列表定义。
  3. 包含 SharePoint 作业的 SharePoint 项目。

它们都在两个包中引用了 Common.dll

4 带有 WebPart 的 SharePoint 项目。我无法让它与 Common.dll 一起工作,即使我已将它添加到 web.config 中的 SafeControl 部件 - WebPart 只是给我消息:这种类型不安全,无法导入。所以我最终只是将代码从 Common.dll 复制到第四个项目。 (跛脚!)

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

问题: 在项目 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?所以我不会有这种例外

重要更新

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

我将不胜感激。

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    完成后,您可以在任何 sp2010 项目中使用此库。

    现在,转到您的 sharepoint 项目,即带有 webpart 的项目,添加引用,应该不会出现任何消​​息。

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

    我认为所有这些步骤应该可以解决您的问题...祝您好运! ;)

    【讨论】:

    • 您好 Gonzix,感谢您的回复。前段时间我已经签署了我的公共库,我创建了一个空密码的新密钥。我会尝试使用 SP 密钥签名,但我应该选择 3 个密钥中的哪一个?我已经完成了您描述的步骤(将 dll 添加到包中)。这就是我所说的“他们都引用Common.dll,在两个包中”的意思,对不起,我在这里不太清楚。
    • 3键是什么意思?我的 sharepoint 项目中只有一个 key.snk 文件。我指的是 webpart 项目中的 key.snk 文件
    • 每个 SharePoint 项目都有一个签名密钥,我猜它们都是不同的。如果我要使用其中的一个来签署 Common.dll,那么使用此代码的其他项目呢?我可以尝试使用 WebPart 项目的密钥对其进行签名。但我的主要问题是“无法加载文件或程序集”
    • 您是否将这 3 个项目部署为单独的 wsp?如果是这样,您可能会遇到问题,因为 3 试图将 common.dll 部署到 gac 中并且正在搞乱部署。尝试从除一个以外的所有包中删除 dll 并重新部署。确保首先从 gac 中删除 common.dll
    • 是的,我有 3 个单独的 wsp。我一个接一个地部署。我已经为我的 dll 检查了 GAC - 它就在那里。而且版本是正确的。
    猜你喜欢
    • 2017-07-31
    • 1970-01-01
    • 2014-02-12
    • 2013-08-04
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多