Gendarme Rules: UI
Gendarme’s user interface rules are located in the Gendarme.Rules.Ui.dll assembly. Latest sources are available from git.
Rules
GtkSharpExecutableTargetRule
An executable assembly, i.e. an .exe, refers to the gtk-sharp assembly but isn’t compiled using -target:winexe. A console window will be created and shown under Windows (MS runtime) when the application is executed.
Bad example:
mcs gtk.cs -pkg:gtk-sharp
Good example:
mcs gtk.cs -pkg:gtk-sharp -target:winexe
SystemWindowsFormsExecutableTargetRule
An executable assembly, i.e. an .exe, refers to the System.Windows.Forms assembly but isn’t compiled using -target:winexe. A console window will be created and shown under Windows (MS runtime) when the application is executed which is probably not desirable for a winforms application.
Bad example:
mcs swf.cs -pkg:dotnet
Good example:
mcs swf.cs -pkg:dotnet -target:winexe
UseSTAThreadAttributeOnSWFEntryPointsRule
This rule checks executable assemblies, i.e. *.exe’s, that reference System.Windows.Forms to ensure that their entry point is decorated with [System.STAThread] attribute and is not decorated with [System.MTAThread] attribute to ensure that Windows Forms work properly.
Bad example #1 (no attributes):
public class WindowsFormsEntryPoint {
static void Main ()
{
}
}
Bad example #2 (MTAThread)
public class WindowsFormsEntryPoint {
[MTAThread]
static void Main ()
{
}
}
Good example #1 (STAThread):
public class WindowsFormsEntryPoint {
[STAThread]
static void Main ()
{
}
}
Good example #2 (not Windows Forms):
public class ConsoleAppEntryPoint {
static void Main ()
{
}
}
Feedback
Please report any documentation errors, typos or suggestions to the Gendarme Google Group. Thanks!