【问题标题】:C# - The reference type 'ISomeInterface' is defined in an assembly that is not referencedC# - 引用类型“ISomeInterface”在未引用的程序集中定义
【发布时间】:2017-07-07 07:49:43
【问题描述】:

我负责将我们公司的核心库从过去在 Visual Studio 2008 上运行的 Compact Framework 2.0 迁移到 Visual Studio 2015、Update 3 和 .Net 4.6。我创建了新的类库并将引用更改为指向旧库的相应 .Net 版本。例如,如果我们有一个引用 Sender.dll 和 Utils.dll 的 ProdoctCore 库,那么在新的 ProducCoreDotNet 库中,我添加了对 SenderDotNet.dll 和 UtilsDotNet.dll 的引用。然后,我将旧 Compact Framework 的类文件添加到新解决方案中,方法是将它们添加为“作为链接”。因此,基本上项目名称具有扩展 DotNet,但名称空间与之前的名称完全相同。

现在我面临的问题是我遇到了一个奇怪的错误:

“引用类型 'IMonitorComponent' 是在未引用的程序集中定义的。您必须添加对程序集 'Utils, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null' 的引用”

但是,我的 UtilsDotNet 的版本是 1.0.0.0,而旧的 Utils 是版本 2.0.0.0。

我在 SO 阅读了几个类似的主题,但与 this question 中提到的不同,IMonitorComponent 没有对其他程序集的任何引用。它只是一个具有几个属性的接口:

 public enum COMPONENT_STATUS
{
    ERROR,
    WARNING,
    OK,
    UNKNOWN,
    DISABLED
}

public class ComponentStatusProperty
{
    public ComponentStatusProperty(string name, COMPONENT_STATUS status, string message)
    {
        ComponentName = name;
        Status = status;
        Message = message;
    }

    public COMPONENT_STATUS Status { get; set; }
    public string Message { get; set; }
    public string ComponentName { get; set; }
}

public interface IMonitorComponent
{
    string Name { get; }
    List<ComponentStatusProperty> Statuses { get; }
    bool ComponentSoBrokenThatTheDeviceCannotWork { get; }
}

所以我没有想法,非常感谢您的帮助。另外,请详细说明您的答案,因为我以前没有做过这样的事情。

【问题讨论】:

  • 我注意到错误提示您添加对“Utils”而不是“UtilsDotNet”的引用。您的新项目是否正在引用旧 DLL(即通过添加引用 -> 浏览而不是通过添加引用 -> 项目)?
  • @wablab 我已将所有引用添加为添加引用-> 通过转到每个 DotNet 程序集版本的 bin/Debug 文件夹进行浏览并添加它们。注意 Utils 和 UtilsDotNet 的命名空间都是一样的。此外,尽管有许多以相同方式引用的程序集,但我只收到有关此特定接口的错误消息。
  • 假设 ProductCoreDotNet、SenderDotNet 和 UtilsDotNet 都在同一个 VS 解决方案中,我会尝试删除解决方案中的所有引用,然后通过 Add Reference -> Project 重新添加它们。然后全部重建。
  • 我假设您引用的程序集或嵌套引用之一使用 SpecificVersion (stackoverflow.com/questions/24022134/…),并且找不到该程序集的特定版本 (1.5)。如果您不需要版本控制,我会将所有引用更改为不使用 SpecificVersion。
  • 您需要修复您的.csproj 文件,最简单的定位问题并解决问题的方法是到review the files manually 查找有冲突的引用或引用。

标签: c# .net dll visual-studio-2015 compact-framework


【解决方案1】:

我们终于找到了原因。我们使用了另一个使用 Utils 版本 1.5 的参考。因此,我为该引用创建了另一个类库,并使用新的 UtilsDotNet 作为其引用,并且问题已得到修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2014-08-15
    • 2016-05-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多