2009-11-26 11 views
5

Visual Studio 2008でフォームデザイナーによって自動生成される名前空間とコードの競合に問題があります。多くのフォーラムやドキュメントを検索していますが、この問題に対する任意の解決策。名前空間、エイリアス、Visual Studioフォームデザイナー

I持って次の名前空間/コードとFoo.dllと呼ばれる1つのアセンブリ:ここ

namespace Foobar.MyCommonForms 
{ 
    public class MyForm : System.Windows.Forms.Form 
    { 
     public void SomeMethod() 
     { 
      var systemclass = new Foobar.System.MySystemClass(); 
     } 
    } 
} 

、コンパイラ:次に

namespace Foobar.System 
{ 
    public class MySystemClass() { } 
} 

、私はソム一般的に使用されるフォームが含まれている別のアセンブリを持っています次のエラーを表示します。型または名前空間 'Windows'は名前空間 'Foobar.System'の一部ではありません。明らかに、コンパイラは名前空間Foobar.System.Windows.FormsのクラスSystem.Windows.Forms.Formを検索しようとします。

アセンブリFoo.dllを参照し、コードファイルで 'extern alias x'を宣言して 'x:'を入力すると、 'global'の代わりに 'x'という別名を使用して解決できました。名前空間Foobar.Systemの型とクラスへのすべての参照の前にあります。コードがコンパイルされます。

しかし、フォームデザイナーはこれを認識せず、フォームを表示しようとするとエラーが表示されるようです。これは、System.Windows.Formsのクラス(たとえばglobal :: System.Windows.Forms.Button)のすべての参照の前に手動で 'global ::'を置くことで解決できますが、コードは自動的に再生成され、 'global ::'部分は削除されます。

質問:私のアセンブリFoo.dllを参照するために使用されるエイリアス「x」をフォームデザイナーに認識させる方法はありますか、それとももっと良い解決法がありますか?名前空間Foobar.Systemの名前を変更することは、あまりにも多くの作業です。

+0

この問題はVS 2010でも発生しています。 –

答えて

0

これを回避する手段はありません。

ResharperやRefactorなどの人気のリファクタリングツール!どちらも名前空間の名前をグローバルに変更する機能があります。私は真剣にそれらを使用することを検討したいと思います。

関連する問題