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

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

是Das,以及如何管理它?

最佳答案 看起来好像发生了一些命名空间隐藏.在VB.NET项目中,存在一个根命名空间,默认情况下设置为项目名称.你可以从Project – >中查看这个.属性 – >申请 – >根命名空间.

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

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

要解决此问题,您有几个选择(选择一个):

>从DynamicLinq.vb中删除名称空间声明,并从该文件中使用System.Linq.Dynamic的对象中删除所有完整限定条件.换句话说,System.Linq.Dynamic.Signature成为签名.要在其他地方使用它,请添加Imports System.Linq.Dynamic.
>将项目/属性/应用程序中的根命名空间删除为空.通过这样做,您的项目将更像C#,您应该在所有类中明确指定名称空间.要在其他地方使用它,请添加Imports System.Linq.Dynamic.
>保留根命名空间,只需更改DynamicLinq.vb的命名空间.例如,将其更改为NewNs.Linq.Dynamic并像以前一样从Signature中删除完整的资格.要在其他地方使用它,请添加Imports RootNs.NewNs.Linq.Dynamic(注意RootNs前缀).

点赞