我最近将我的项目从Visual Studio 2008升级到Visual Studio 2010。
通过启用代码分析并在发布的基础上构建,我收到警告CA1811:避免使用未调用的私有代码。
我设法将代码缩减为:
.h文件:
public ref class Foo
{
public:
virtual System::String^ ToString() override;
private:
static System::String^ Bar();
};
.cpp文件:
String^ Foo::ToString()
{
return Bar();
}
String^ Foo::Bar()
{
return "abc";
}
我得到的警告:
CA1811: Microsoft.Performance: 'Foo :: Bar(void)'似乎没有 上游公众或受保护 呼叫者。
Bar()
是否为static
并不重要。
我试图用C#重现它,但我不能。我只能用C ++ / CLI重现它。
为什么我会收到此警告?
这是Visual Studio 2010的错误吗?
更新
答案 0 :(得分:3)
微软的家伙已经复制了这个错误并决定不修复它。
解决警告是解决方法。
非常欢迎您在Microsoft Connect上投票支持此错误。
答案 1 :(得分:1)
如果出现当前未由规则逻辑识别的入口点,则此规则可以报告误报。此外,编译器可能会将不可调用的代码发送到程序集中。
换句话说,我很确定微软会说这不是一个错误,但是这个规则的检测技术还没有被深入讨论。
从同一文档中,它还说:
可以安全地禁止此规则发出警告。
答案 2 :(得分:0)
向我建议你写了一个永远不会被调用的函数。
答案 3 :(得分:0)
如果它只发生在发布版本中,我的猜测是编译器正在放弃对Foo::Bar
的调用,只是让ToString()
直接返回"bar"
。您可以通过检查IL来验证这一点。