Visual Studio 2008 のフォーム デザイナーによって自動生成される名前空間とコードの競合に問題があります。多くのフォーラムやさまざまなドキュメントを検索しましたが、この問題の解決策を見つけることができませんでした。
次の名前空間/コードを持つ Foo.dll というアセンブリが 1 つあります。
namespace Foobar.System
{
public class MySystemClass() { }
}
次に、一般的に使用されるフォームを含む別のアセンブリがあります。
namespace Foobar.MyCommonForms
{
public class MyForm : System.Windows.Forms.Form
{
public void SomeMethod()
{
var systemclass = new Foobar.System.MySystemClass();
}
}
}
ここで、コンパイラは次のエラーを表示します: Type or namespace 'Windows' is not part of namespace 'Foobar.System'. 明らかに、コンパイラは名前空間 Foobar.System.Windows.Forms でクラス System.Windows.Forms.Form を検索しようとします!
アセンブリ Foo.dll を参照するときに「global」ではなくエイリアス「x」を使用し、コード ファイルで「extern alias x」を宣言し、「x::」を前に置くことで、これを解決できました。名前空間 Foobar.System 内の型とクラスへのすべての参照。コードがコンパイルされます。
しかし、フォーム デザイナーはこれを認識していないようで、フォームを表示しようとするとエラーが発生します。これも、System.Windows.Forms のクラスへのすべての参照の前に手動で 'global::' を配置することで解決できます (global::System.Windows.Forms.Button など)。コードは自動的に再生成され、「global::」部分が削除されます。
質問は、フォーム デザイナーにアセンブリ Foo.dll を参照するために使用されるエイリアス 'x' を認識させる方法はありますか、それとも別のより良い解決策がありますか? 名前空間 Foobar.System を別の名前に変更するのは大変な作業です。