4

我会使用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 在此处输入图像描述

是达斯,又该如何管理呢?

4

1 回答 1

2

看起来好像正在发生一些名称空间隐藏。在 VB.NET 项目中存在一个默认设置为项目名称的根命名空间。您可以从Project -> Properties -> Application -> Root namespace进行检查。

当一个类显式指定一个命名空间时,根命名空间是它的前缀。例如,假设您的根命名空间是RootNs. 由于该DynamicLinq.vb文件指定了一个命名空间,System.Linq.Dynamic这确实是RootNs.System.Linq.Dynamic. 这隐藏了常规的 .NETSystem命名空间,这就是 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前缀)。

于 2011-08-11T19:38:36.453 回答