【问题标题】:"Reference required" error when referencing NServiceBus assembly from another project从另一个项目引用 NServiceBus 程序集时出现“需要引用”错误
【发布时间】:2011-01-12 17:04:55
【问题描述】:

我们正在尝试编写一个在 VB.NET 环境中使用 NServiceBus 库的应用程序。我们遇到了类似以下的错误:

包含实现的接口“NServiceBus.IMessageHandler`1”的程序集“NServiceBus, Version=2.0.0.1071, Culture=neutral, PublicKeyToken=9fc386479f8a226c”需要参考。将一个添加到您的项目中。

我们的项目已经包含对来自同一 NServiceBus 2.0 RC2 发行版的 NServiceBus.dll 和 NServiceBus.Core.dll 的引用。


重现步骤:

  1. 创建新的 VB 类库项目 (.NET 3.5)
  2. 添加 NServiceBus.dll 和 NServiceBus.Core.dll 作为参考。
  3. 将以下代码放入Class1.vb:

    Imports NServiceBus.Sagas.Impl
    Class Test
        Public Function Foo() As SagaMessageHandler
            Return Nothing
        End Function
    End Class
    
  4. 您现在应该会看到上面提到的编译器错误。

用 C# 编写的相同项目没有编译错误。


关于如何解决这个问题的任何想法? (而且,是的,我首选的解决方案是切换到 C#,但不,目前这不是一个可接受的解决方案。)

【问题讨论】:

  • 很奇怪,这里也能重现。能把源码拉下来本地重建吗?
  • 是的,拉下主干源并使用提供的构建脚本在本地构建它。有同样的问题。还没有仔细查看构建脚本,看看它是否正在做任何可能导致这种情况的事情。

标签: vb.net assemblies nservicebus


【解决方案1】:

预感这是一个与 ILMerge 相关的问题,我找到了this post suggesting that assembly signing might be responsible

我下载了 NServiceBus 主干源,打开 src/core/NServiceBus.sln,并设置解决方案中的每个项目,以使用来自源树根的 NServiceBus.snk 对程序集进行签名。重建 NServiceBus 后生成的新 DLLS 修复了我原来帖子中的编译器错误。

【讨论】:

    【解决方案2】:

    这些项目现在在主干和 2.0 分支上都具有强名称。

    希望这会有所帮助!

    【讨论】:

    • 即使使用最新的 3.0 签名程序集也不会出现同样的问题 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2011-04-15
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多