It is possible, but fiddly, to discover unused resources:
(1) Ensure Code Analysis warning CA1811 is turned on.
(2) In your Resources.Designer.CS file (or other applicable designer file) comment out the following lines:
[global:: System.CodeDom.Compiler.GeneratedCodeAttribute( ...
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global:: System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
(3) Change the class to a static class by putting the word "static" in front of "class":
internal static class Resources {
(4) Comment out the default constructor.
(5) Comment out any “InternalsVisibleTo” lines (these are usually in “AssemblyInfo.cs”).
(6) Compile your program. Now you should be warned about any unused resources.
(7) Remove your unused resources. (Note that changing any resources will regenerate the Resources.Designer.cs file.)
I'm not sure how to find undefined resources though.