我在两个项目中使用 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...
{ }
我创建了接受字符串参数的构造函数,因此其他项目不一定需要添加 Exchange.WebServices 库。
但后来我遇到了一个无法预料的问题。
当我在我的第二个项目(不包含对 Exchange.WebServices dll 的引用)中创建 ExchangeConnector("Exchange2007_SP1") 的实例时,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'.
我什至没有使用带有 ExchangeVersion 枚举引用的构造函数,但它需要我引用它?
如果我用 ExchangeVersion 枚举注释掉构造函数,一切都会编译、工作,没有运行时错误。或者如果我修改重载构造函数,这样 Intellisense 就不可能混淆两者,例如:
public class ExchangeConnector(string url, ExchangeVersion ver)
{
// Property assignments
}
当我调用 ExchangeConnector("Exchange2007_SP1") 时,代码编译并正常工作。没有运行时错误。
几乎就好像 VS 无法解析正确使用哪个构造函数。现在我知道我可以添加对第二个项目的引用并完成它,但我很好奇 VS 为什么要这样做。有任何想法吗?