asp.net 调试时无法计算表达式

9cbw7uwe  于 2022-12-27  发布在  .NET
关注(0)|答案(5)|浏览(241)

当调试asp.net代码(针对IIS运行,并使用Visual Studio 2013)时,在断点中并尝试使用快速监视计算变量时,我经常会得到“无法计算表达式”。
从www.example.com项目文件夹中删除.suoasp.net似乎可以解决问题(重新加载解决方案后)
这是一个公认的错误吗?现在在多台计算机上的Visual Studio 2013中经常出现此错误。

xfb7svmp

xfb7svmp1#

我今天面对VS 2013。
后藤工具--〉选项--〉调试--〉一般--〉滚动到底部的“使用托管兼容性模式”,并选择该选项。
博客截图(网址如下):x1c 0d1x重新启动调试。

0dxa2lsx

0dxa2lsx2#

C#调试引擎严重依赖CLR调试器来计算表达式。该消息指示CLR处于无法执行简单计算的状态,其原因可能包括

  • 局部变量被优化掉了
  • 线程在GC不安全点停止
  • 先前的函数调用导致调试器进入错误状态,因此无法进行进一步的计算
ercv8c1e

ercv8c1e3#

其中一些选项会随着时间的推移而变化--而其他答案中排名靠前的解决方案似乎不再存在了--搜索选项对话框会有所帮助。
现在我在ASPNET Core项目中找到了this,启用它似乎很有帮助:

在模块加载时取消JIT优化(仅限托管):在附加调试器的情况下加载模块并编译JIT时,禁用托管代码的JIT优化。禁用优化可能会使调试某些问题变得更容易,但会牺牲性能。如果使用“仅我的代码”,则取消JIT优化可能会导致非用户代码显示为用户代码(“我的代码”)。有关详细信息,请参见JIT优化和调试。
如果看起来没有帮助,我建议再次关闭它。

pw136qt2

pw136qt24#

我曾在特定的项目中遇到过这种情况,原因是Costura.Fody(将所有DLL嵌入到执行程序集中)。
在这种情况下,您可以禁用Costura.Fody.
1.注解掉FodyWever.xml中的Costura

<Weavers>
  <!--<Costura />-->
</Weavers>

1.禁用 *.csproj中的干净引用目标(如果包括

<!--<Target Name="CleanReferenceCopyLocalPaths" AfterTargets="AfterBuild">
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%
     (DestinationSubDirectory)%(Filename)%(Extension)')" />
    <Exec Command="DeleteEmptyDirectory.bat" />
  </Target>-->
uurv41yg

uurv41yg5#

转到Tools --> Options --> Environment --> General -->,选中“根据客户端性能自动调整视觉体验”选项。

相关问题