C# でこれを行うと、次のようにコンパイルされます。
namespace Name
{
public class Test
{
}
public class TestUse
{
private global::Name.Test test;
}
}
ただし、VB.NET で同じことを試みると、次のようにはなりません。
Namespace Name
Public Class Test
End Class
Public Class TestUse
Private test As Global.Name.Test
End Class
End Namespace
("Test" の使用方法によっては) 「'Name' は '<Default>' のメンバーではありません」というメッセージが表示されます。または「タイプ 'Name.Test' が定義されていません。」私のエラーリストに。私はそれを機能させる 2 つの方法を見つけましたが、どちらもユーザーに期待するのは合理的ではありません。1 つは、プロジェクト プロパティから「ルート名前空間」を削除することです。もう 1 つは、"Global" と "Name" の間にその名前空間を含めることです。
CodeDom を使用して C# と VB.NET の両方のコードを生成するカスタム ツールを作成しました。これが、上記の 2 つの修正のいずれも実行できない理由です。ユーザーが空のルート名前空間を持つことを期待することはできません。また、コード生成で VB 固有のトリックを実行する必要はありません (一種の言語に中立なツールを使用する目的ではないでしょうか?) 「ルート名前空間」を選択し (頭のてっぺんからどのように知っているわけではありません)、それをコード生成に含めるなどです。
グローバル修飾子も除外したくありません。生成された出力に不適切な名前を選択するユーザーからツールを保護するためです。これにどう対処すべきかについて誰か提案がありますか?