You can consider this list and review each suggested product:
https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#.NET[
^],
see also
http://bfy.tw/dKE[
^].
I personally only used FxCop; I simply don't remember if dead code is detected, probably it should. This product has some problems but is quite usable and can be considered useful, recommended.
I also tried StyleCop and found it extremely stupid (well, the version I tried), won't recommend it. I would really recommend to try all other tools.
Now, you also need to understand this: even though elimination of all the dead code would be the decent approach, dead code in .NET is less of a problem. This is because .NET is based on JIT-compilation. If some method is never called, it will never be JIT-compiled. Please see:
https://en.wikipedia.org/wiki/Just-in-time_compilation[
^].
You probably understand that the compiler along cannot eliminate dead code. If some members are private and never used, the compiler will detect it, as well as unused or uninitialized local variables. But non-private members, want be detected as unused, by quite apparent reasons. Removing unused declaration is not the only goal of static analysis of the code. For example, you can keep all access modifiers tight, so no member or type used only internally in the assembly would be allowed to declared public. But this kind of criteria, apparently, cannot be applied based on a separate assembly.
—SA