2 つのプロジェクトで Visual Studio 2010 を使用しています。
1 つには、ExchangeServices にアクセスするための Microsoft の Exchange.WebServices dll (ver1.2) を参照するプロジェクトが含まれています。Exchange サーバーに (ExchangeService API を介して) 接続しているときにさまざまなタスクを実行するためのヘルパー メソッドとラッパーを含むクラスを作成しました。ExchangeService コンストラクターは、サーバーのバージョン情報を指定するために、ExchangeVersion の列挙型を受け入れることができます。そこで、クラス内に 2 つのコンストラクターを作成しました。
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 ライブラリを追加する必要がないように、文字列パラメーターを受け入れるコンストラクターを作成しました。
しかし、その後、予期せぬ問題に遭遇しました。
2 番目のプロジェクト (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 が次のように 2 つを混同できないように、オーバーロード コンストラクターを変更した場合:
public class ExchangeConnector(string url, ExchangeVersion ver)
{
// Property assignments
}
ExchangeConnector("Exchange2007_SP1") を呼び出すと、コードがコンパイルされ、正常に動作します。実行時エラーはありません。
VS が適切に使用するコンストラクターを解決できないかのようです。これで、2 番目のプロジェクトへの参照を追加して完了できることがわかりましたが、なぜ VS がこれを行っているのか興味があります。何か案は?