Visual Studio 2010 で最初の「サービス参照」をクライアント プロジェクトに追加するときに、この奇妙な名前空間の問題が発生しました。
プロジェクトのデフォルトの名前空間が 2 つ以上の部分を使用している場合、たとえば、サービス参照を追加すると、完全修飾名を持つ多くの自動生成コードを持つMyCompany.MyApp
名前空間を含む Reference.cs ファイルが作成されます。MyCompany.MyApp.ServiceReferenceName
System.SerializableAttribute
System.Runtime.Serialization.DataContractAttribute
コンパイラが System 名前空間を名前空間のサブメンバーとして扱い始めるため、Reference.cs ファイルはコンパイル エラーでいっぱいになりMyCompany.MyApp
ます。次の行に沿って非常に多くのエラーが発生します。
The type or namespace name 'Runtime' does not exist in the namespace 'MyCompany.MyApp.System'...
たとえば、Reference.cs ファイルの先頭にある名前空間を単純なものに修正するMyCompanyMyApp.ServiceRefernceName
と、コンパイラは動作し、System 名前空間の参照を .net の System 名前空間の宣言として認識します。
マルチパートの名前空間を本当に維持したいので、今のところ別の回避策を使用しています。私の現在の代替手段はglobal::
、システム名前空間参照の前に追加して、コンパイラに正しいことを強制することです。実際、「サービス参照の追加」ウィザードが T4 テンプレートを使用している場合は、それらを修正して、回避策をソースに埋め込むことができます。
質問
ここで何が起こっているのか、マルチパート名前空間がこの問題を引き起こす理由を理解したいと思います。おそらく、名前空間には私が思っていたよりも多くのものがあります。次に、サービス参照を追加するたびにグローバル検索/置換を実行したり、T4 テンプレートをいじったりするよりも優れたソリューションを見つけたいと思っています。