变量在当前上下文中不存在,尽管它确实存在
Variable does not exist in current context although it does exist
我正在 运行 对一个 dll 进行单元测试。
[TestMethod]
public void Test1()
{
List<MyObject> a = GetData();
}
当我尝试将其更改为以下内容时效果很好,但是:
[TestMethod]
public void Test1()
{
List<MyObject> b = GetData();
List<MyObject> a = GetData();
}
我遇到了一个问题,当我到达 b 或 a 上的断点时,它说 b 在当前上下文中不存在。但是同一条线路适用于我的一个同事。
我已经重新启动 visual studio 并清理了解决方案并重建了它。
有人知道吗?
如果您正在调试在发布模式下编译/设置了 'Optimise Code' 标志的版本,就会发生这种情况。
这是因为如果编译器知道永远无法使用变量,那么编译器可以自由地将变量移出范围,而调试模式将保留范围内的变量,只要从语言的角度来看它们在范围内。
由于 b(和 a)从未在您的代码中使用,因此编译器是免费的,在发布模式下将您的代码视为:
[TestMethod]
public void Test1()
{
GetData();
GetData();
}
确实如此。
我正在 运行 对一个 dll 进行单元测试。
[TestMethod]
public void Test1()
{
List<MyObject> a = GetData();
}
当我尝试将其更改为以下内容时效果很好,但是:
[TestMethod]
public void Test1()
{
List<MyObject> b = GetData();
List<MyObject> a = GetData();
}
我遇到了一个问题,当我到达 b 或 a 上的断点时,它说 b 在当前上下文中不存在。但是同一条线路适用于我的一个同事。
我已经重新启动 visual studio 并清理了解决方案并重建了它。 有人知道吗?
如果您正在调试在发布模式下编译/设置了 'Optimise Code' 标志的版本,就会发生这种情况。
这是因为如果编译器知道永远无法使用变量,那么编译器可以自由地将变量移出范围,而调试模式将保留范围内的变量,只要从语言的角度来看它们在范围内。
由于 b(和 a)从未在您的代码中使用,因此编译器是免费的,在发布模式下将您的代码视为:
[TestMethod]
public void Test1()
{
GetData();
GetData();
}
确实如此。