ReSharper似乎忽略了Debug.Assert(布尔)上的外部注释

ReSharper似乎忽略了Debug.Assert(布尔)上的外部注释,resharper,nullreferenceexception,Resharper,Nullreferenceexception,我使用的是Visual Studio 2010和ReSharper 8.2.1,扩展名为ReSharper.ExternalAnnotations 8.2.1001。尽管以下代码中有断言,但ReSharper仍会警告可能出现的System.NullReferenceException。它甚至建议添加一个断言作为修复 static int Foo(string s) { Debug.Assert(s != null); return s.Length; // Possible 'S

我使用的是Visual Studio 2010和ReSharper 8.2.1,扩展名为ReSharper.ExternalAnnotations 8.2.1001。尽管以下代码中有断言,但ReSharper仍会警告可能出现的
System.NullReferenceException
。它甚至建议添加一个断言作为修复

static int Foo(string s)
{
    Debug.Assert(s != null);
    return s.Length; // Possible 'System.NullReferenceException'
}
我已经解压缩了
C:\ProgramFiles(x86)\JetBrains\ReSharper\v8.2\Bin\packages\ReSharper.ExternalAnnotations.8.2.1000.4556.nupkg
,并找到了预期的外部注释,该注释应该告诉ReSharper“理解”断言

这里可能出了什么问题


编辑:这是一个调试版本。

如果您正在编译一个
发行版
版本,我相信R#会忽略对
调试的条件调用。Assert

您是否检查了R#的外部注释配置窗格?确保您正在使用的DLL在那里正确列出。如果将断言替换为
if(s==null)return,会发生什么情况?它是否仍然警告
s.Length
?噢!德鲁,你的第一句话是对我问题的正确回答。谢谢我误解了配置窗格:我认为它只引用了代码分析注释(NotNull等),因为我的注释不在JetBrains.annotations命名空间中,所以我禁用了它。我会将您的答案标记为正确答案,尽管它实际上是注释,因此您可能应该相应地编辑您的答案。此外,我注意到,如果您卸载ReSharper.ExternalAnnotations,您将不得不从项目中取消以前创建的..\Properties\Annotations.cs文件的链接。