Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 VS2010调试器窗口在使用MS代码协定时丢失类型解析_Visual Studio 2010_Debugging_Code Contracts - Fatal编程技术网

Visual studio 2010 VS2010调试器窗口在使用MS代码协定时丢失类型解析

Visual studio 2010 VS2010调试器窗口在使用MS代码协定时丢失类型解析,visual-studio-2010,debugging,code-contracts,Visual Studio 2010,Debugging,Code Contracts,自从开始使用代码契约.NET 4.0、VS2010 Ultimate&Premium以来,我们在调试器窗口中遇到了一个奇怪的问题 我有一个简单的解决方案,一个可执行文件,一个使用代码契约的库,一个不使用代码契约的库。每个库包含一个类,并在该类的构造函数中初始化一个整数列表。如果我们在列表初始化后放置一个断点,并在调试器窗口(包括即时窗口)中查看它,我们可以很好地看到值。但是,如果我们试图将该值强制转换为其显式类型,它就会中断 在不使用代码协定的库中,以下功能在调试器窗口中工作: (List<

自从开始使用代码契约.NET 4.0、VS2010 Ultimate&Premium以来,我们在调试器窗口中遇到了一个奇怪的问题

我有一个简单的解决方案,一个可执行文件,一个使用代码契约的库,一个不使用代码契约的库。每个库包含一个类,并在该类的构造函数中初始化一个整数列表。如果我们在列表初始化后放置一个断点,并在调试器窗口(包括即时窗口)中查看它,我们可以很好地看到值。但是,如果我们试图将该值强制转换为其显式类型,它就会中断

在不使用代码协定的库中,以下功能在调试器窗口中工作:

(List<int>)nums
在使用代码协定的库中,这会生成类型或命名空间“List”在此范围内无效。我们必须执行以下操作才能使其正常工作:

(System.Collections.Generic.List<int>)nums
请注意,代码工作正常,没有问题,问题只出现在调试器窗口中


更新:唯一似乎有效的设置是项目属性中“代码契约”选项卡上“执行运行时契约检查”旁边的复选框。在查看ILSpy中的代码后,我发现一个属性添加到assemblyinfo.cs中,一个属性RuntimeContractsAttribute和一个enum RuntimeContractsFlags添加到我的项目中。一时兴起,我从ILSpy复制了这些项目的代码,并创建了自己的版本。现在,一切正常。但是,当我选择构建契约引用程序集时,构建失败。我假设引用生成器正在尝试添加编译器生成的代码,因为我是手动添加的。但是,在不手动添加运行时代码的情况下,无论生成协定引用程序集设置如何,调试器仍然会失败。

两个库之间重要的区别不在于它们是否使用代码协定库,而在于您是否具有using System.Collections.Generic;断开调试器的代码文件中的语句


VisualStudio调试器尽其所能对表达式进行求值,就像您要在中断的代码行上编写表达式一样,这包括尊重该代码行的词法范围;如果要尝试在没有using System.Collections.Generic;,的文件中强制转换为列表;,这也会失败,并出现一个错误。

两个库之间重要的区别不是它们是否在使用代码契约库,而是您是否有一个using System.Collections.Generic;断开调试器的代码文件中的语句


VisualStudio调试器尽其所能对表达式进行求值,就像您要在中断的代码行上编写表达式一样,这包括尊重该代码行的词法范围;如果要尝试在没有using System.Collections.Generic;,的文件中强制转换为列表;,这也会导致错误。

是的,这是一个已知的问题。程序集的pdb中有一些调试信息,我们可能无法正确维护,这与给定点范围内的一组using有关。这会影响调试器假定的范围,从而影响您遇到的问题。

是的,这是一个已知的问题。程序集的pdb中有一些调试信息,我们可能无法正确维护,这与给定点范围内的一组using有关。这会影响调试器假设的范围,从而影响您遇到的问题。

好吧,那么我错了:我猜这与重写IL的代码契约有关。我认为答案可能与中的相同;也许你应该试着打开一个连接问题?我在前面看到了答案,谢谢你的链接,但是他的问题在升级时得到了解决。其中一个开发人员打开了一个连接问题,但我们必须将其标记为私有,因为原始问题包含业务信息:。谢谢你们的输入,我真的很感激。好吧,我错了:我猜这和IL的代码契约重写有关。我认为答案可能与中的相同;也许你应该试着打开一个连接问题?我在前面看到了答案,谢谢你的链接,但是他的问题在升级时得到了解决。其中一个开发人员打开了一个连接问题,但我们必须将其标记为私有,因为原始问题包含业务信息:。谢谢你的意见,我真的很感激。