【发布时间】: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