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

Posted

技术标签:

【中文标题】错误:命名空间不能直接包含字段或方法等成员[重复]【英文标题】:Error: A namespace cannot directly contain members such as fields or methods [duplicate] 【发布时间】:2012-11-14 09:58:10 【问题描述】:

我是 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");

【问题讨论】:

拜托,你有什么烦恼。当问题未定义时,我们无法为您提供帮助 【参考方案1】:

您的代码应该在一个类中,然后是一个方法。您不能在命名空间下拥有代码。类似于以下的东西。

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


    

【讨论】:

【参考方案2】:

正如 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# 程序的入口点。

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

【讨论】:

【参考方案3】:

这很可能是您打算做的:

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");
            
        
    

【讨论】:

错误 1 ​​程序 'c:\Users\laptop.test\Documents\Visual Studio 2012\Projects\Project1\Project1\obj\Debug\Project1.exe' 不包含静态 'Main' 方法适合入口点 c:\users\laptop.test\documents\visual studio 2012\Projects\Project1\Project1\CSC Project1 谢谢,你能理解这个错误吗?【参考方案4】:

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

【讨论】:

以上是关于错误:命名空间不能直接包含字段或方法等成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试统一编写枪支脚本,但它说命名空间不能直接包含字段或方法等成员[重复]

命名空间不能直接包含 2D 无限运行器中的字段或方法等成员 [重复]

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

命名空间不能直接包含字段或方法等成员(DayNight)

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

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