VB.NET и пространство имен System.Linq.Dynamic - PullRequest
4 голосов
/ 11 августа 2011

Я бы использовал System.Linq.Dynamic .

Я добавил указанный Dynamic.vb файл, который начинается следующим образом:

Option Strict On
Option Explicit On

Imports System.Collections.Generic
Imports System.Text
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Threading
Imports System.Runtime.CompilerServices

Namespace System.Linq.Dynamic
  Public Module DynamicQueryable

к моему (VB.NET) решению.

Теперь Visual Studio больше не распознает в файлах проекта ссылки System.XXX, предлагая мне изменить их на Global.System.XXX enter image description here

Был ли это Дас, и как им управлять?

1 Ответ

2 голосов
/ 11 августа 2011

Похоже, что происходит скрытие некоторого пространства имен.В проектах VB.NET существует корневое пространство имен, для которого по умолчанию установлено имя вашего проекта.Вы можете проверить это в Проект -> Свойства -> Приложение -> Корневое пространство имен .

Когда класс явно указывает пространство имен, корневое пространство имен имеет префикс к нему.Например, допустим, ваше корневое пространство имен - RootNs.Поскольку файл DynamicLinq.vb задает пространство имен System.Linq.Dynamic, это действительно RootNs.System.Linq.Dynamic.Это скрывает обычное пространство имен .NET System, поэтому Visual Studio предлагает префиксировать все ваши пространства имен с Global.

Стоит отметить, что в C # эта концепция отличается, поэтому я бы не сталожидать, что эта проблема возникнет, когда кто-то использует версию C # DynamicLinq.

. Чтобы исправить это, у вас есть несколько вариантов (выберите один):

  1. Удалитеобъявление пространства имен из DynamicLinq.vb и удаление любых полных уточнений из объектов в этом файле, которые используют System.Linq.Dynamic.Другими словами, System.Linq.Dynamic.Signature становится Signature.Чтобы использовать его в другом месте, добавьте Imports System.Linq.Dynamic.

  2. Удалите корневое пространство имен из Project / Properties / Application, сделав его пустым.Таким образом ваш проект будет больше похож на C #, и вы должны явно указать пространства имен во всех ваших классах.Чтобы использовать его в другом месте, добавьте Imports System.Linq.Dynamic.

  3. Сохраните корневое пространство имен и просто измените пространство имен на DynamicLinq.vb.Например, измените его на NewNs.Linq.Dynamic и удалите полную квалификацию из Signature, как и раньше.Чтобы использовать его в другом месте, добавьте Imports RootNs.NewNs.Linq.Dynamic (обратите внимание на префикс RootNs).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...