错误:命名空间不能直接包含字段或方法等成员

时间:2012-11-14 09:58:11

标签: c#

我是C#的新手,我在解决此错误时遇到问题,任何人都可以帮助我吗?此脚本用于删除不需要的快捷方式,然后安装新程序(如果尚未安装)。

using System;
using WindowsInstaller;


string startMenuDir = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
string shortcutold = Path.Combine(startMenuDir, @"Ohal\TV AMP (Windows XP Mode).lnk");
if (File.Exists(shortcutold))
File.Delete(shortcutold);


string startMenuDir = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
string shortcut = Path.Combine(startMenuDir, @"Ohal\TV AMP.lnk");
if (File.Exists(shortcut))
{
    Console.WriteLine("Already installed...");
}
else
{
Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
            Installer installer = (Installer)Activator.CreateInstance(type);
            installer.InstallProduct(@"Y:\LibSetup\TVAMP313\TVAmp v3.13.msi");
}

4 个答案:

答案 0 :(得分:6)

您的代码应该在类中,然后是方法。您不能在命名空间下拥有代码。跟随之类的事情。

using System;
using WindowsInstaller;

class MyClass //Notice the class 
{
 //You can have fields and properties here

    public void MyMethod() // then the code in a method
    {
        string startMenuDir = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
        string shortcutold = Path.Combine(startMenuDir, @"Ohal\TV AMP (Windows XP Mode).lnk");
        if (File.Exists(shortcutold))
            File.Delete(shortcutold);
       // your remaining code .........


    }
}

答案 1 :(得分:3)

正如Habib所说,你需要将代码放在方法,构造函数等中。在这种情况下,如果你想要的代码就是你想要的入口点,你只需要:

using System;
using WindowsInstaller;

class Program
{
    // Or static void Main(string[] args) to use command line arguments
    static void Main()
    {
        string startMenuDir = ...;
        string shortcutold = ...;
        // Rest of your code
    }
}

基本上Main方法是独立C#程序的入口点。

当然,如果你的代码是其他东西的插件,你可能只需要实现一个接口或类似的东西。无论哪种方式,您都必须将您的代码放在成员中,而不仅仅是“裸露”。

答案 2 :(得分:1)

这很可能是你打算做的:

using System;
using WindowsInstaller;

namespace DataImporter
{
    class Program
    {
        static void Main(string[] args)
        {

            string startMenuDir = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
            string shortcutold = Path.Combine(startMenuDir, @"Ohal\TV AMP (Windows XP Mode).lnk");
            if (File.Exists(shortcutold))
            File.Delete(shortcutold);


            string startMenuDir = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
            string shortcut = Path.Combine(startMenuDir, @"Ohal\TV AMP.lnk");
            if (File.Exists(shortcut))
            {
                Console.WriteLine("Already installed...");
            }
            else
            {
            Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
                        Installer installer = (Installer)Activator.CreateInstance(type);
                        installer.InstallProduct(@"Y:\LibSetup\TVAMP313\TVAmp v3.13.msi");
            }
        }
    }
}

答案 3 :(得分:1)

你的方法现在必须在一个类中这是在一个命名空间中,你必须在这个命名空间中声明一个类然后在这个类中声明方法