小编Sco*_*ott的帖子

Visual Studio在未引用库时选择错误的构造函数?

我正在使用Visual Studio 2010和两个项目.

一个包含引用Microsoft的Exchange.WebServices dll(ver1.2)的项目,用于访问ExchangeServices.我创建了一个类,其中包含一些辅助方法和包装器,以便在连接到Exchange服务器(通过ExchangeService API)时执行各种任务.ExchangeService构造函数可以接受ExchangeVersion的枚举,以指定服务器版本信息.所以我在班上创建了两个构造函数.

public class ExchangeConnector(string ver)
{
    // Property assignments
}

public class ExchangeConnector(ExchangeVersion ver)
    :this(ver.toString()) //Using(or not using) "this", doesn't seem to matter...
{ }
Run Code Online (Sandbox Code Playgroud)

我创建了接受字符串参数的构造函数,因此其他项目不一定需要添加Exchange.WebServices库.

但后来我遇到了一个未经预见的问题.

当我在第二个项目中创建一个ExchangeConnector实例("Exchange2007_SP1")(不包含对Exchange.WebServices dll的引用)时,Intellisense没有选择正确的构造函数,也没有显示任何预编译错误.但是,当我强制构建时,我收到以下错误:

Error: The type 'Microsoft.Exchange.WebServices.Data.ExchangeVersion' is defined
in an assembly that is not referenced. You must add a reference to assembly
'Microsoft.Exchange.WebServices, Version=14.0.0.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35'.
Run Code Online (Sandbox Code Playgroud)

我甚至没有使用带有ExchangeVersion枚举引用的构造函数,但它需要我引用它?

如果我用ExchangeVersion枚举注释掉构造函数,那么一切都会编译,工作,没有运行时错误.或者如果我修改了重载构造函数,那么Intellisense不可能混淆两者,例如:

public class ExchangeConnector(string url, ExchangeVersion ver)
{ 
  // Property assignments
}
Run Code Online (Sandbox Code Playgroud)

当我调用ExchangeConnector("Exchange2007_SP1")时,代码编译并正常工作.没有运行时错误.

几乎就像VS无法解析正确使用哪个构造函数一样.现在我知道我可以添加对第二个项目的引用并完成它,但我很好奇为什么VS这样做.有任何想法吗?

c# .net-4.0 visual-studio-2010

5
推荐指数
1
解决办法
1283
查看次数

标签 统计

.net-4.0 ×1

c# ×1

visual-studio-2010 ×1