VB.NET和System.Linq.Dynamic命名空间

时间:2011-08-11 18:05:00

标签: .net vb.net namespaces dynamic-linq

我会使用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

是Das,以及如何管理它?

1 个答案:

答案 0 :(得分:2)

看起来好像发生了一些命名空间隐藏。在VB.NET项目中,存在一个根命名空间,默认情况下设置为项目名称。您可以从项目 - >中查看此内容属性 - >申请 - >根名称空间

当类显式指定命名空间时,根命名空间会以其为前缀。例如,假设您的根命名空间为RootNs。由于DynamicLinq.vb文件指定了System.Linq.Dynamic的命名空间,因此这是RootNs.System.Linq.Dynamic。这会隐藏常规的.NET System命名空间,这就是Visual Studio提示您使用Global为所有命名空间添加前缀的原因。

值得注意的是,在C#中这个概念是不同的,所以当有人使用DynamicLinq的C#版本时,我不希望出现这个问题。

要解决此问题,您可以选择一些选项(选择一个):

  1. DynamicLinq.vb中删除名称空间声明,并从该文件中使用System.Linq.Dynamic的对象中删除所有完整限定条件。换句话说,System.Linq.Dynamic.Signature变为Signature。要在其他地方使用它,请添加Imports System.Linq.Dynamic

  2. 通过将其命名为空来从项目/属性/应用程序中删除根命名空间。通过这样做,您的项目将更像C#,您应该在所有类中明确指定名称空间。要在其他地方使用它,请添加Imports System.Linq.Dynamic

  3. 保留根命名空间,只需更改DynamicLinq.vb的命名空间。例如,将其更改为NewNs.Linq.Dynamic,并像以前一样从Signature中删除完整的资格。要在其他地方使用它,请添加Imports RootNs.NewNs.Linq.Dynamic(注意RootNs前缀)。