我正在使用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这样做.有任何想法吗?