C# код, показывающий ошибку «Пространство имен не может напрямую содержать элементы, такие как поля или методы» - PullRequest
0 голосов
/ 20 февраля 2020

Я не знаю, почему появляется эта ошибка. У меня нет ничего объявленного вне класса, мой полный код такой:

using System;
using Microsoft.CSharp;
using System.IO;
using System.CodeDom.Compiler;
using System.Text;

namespace test
  {
  public class comp
   {
    static void Main()
    {
        string code="0x4d,0x41,0x2......"; //and soo onnn
        string Arch = " /platform:x86 /optimize";
        string filePath = "C:/menmon.exe";
        CSharpCodeProvider provider = new CSharpCodeProvider();
        CompilerParameters parameters = new CompilerParameters();

        parameters.ReferencedAssemblies.Add("System.Core.dll");
        parameters.GenerateInMemory = false;
        parameters.GenerateExecutable = true;
        parameters.IncludeDebugInformation = false;
        parameters.ReferencedAssemblies.Add("mscorlib.dll");
        parameters.ReferencedAssemblies.Add("System.dll");

        parameters.OutputAssembly = filePath;
        parameters.CompilerOptions = "/target:exe" + Arch;
        CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
        if (results.Errors.HasErrors)
        {
        StringBuilder sb = new StringBuilder();
        foreach (CompilerError error in results.Errors)
          {
            sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText));
          }
        }

        throw new InvalidOperationException(sb.ToString());
      }
    }
  } 

}

Скомпилировал это с помощью cmd on Windows машина включена. Net framework64 v4.0.30319 ошибка возникает после компиляции (при компиляции ошибка не отображается), когда я запускаю программу, появляется эта ошибка:

Необработанное исключение: System.InvalidOperationException : Ошибка (CS0116): Пространство имен не может напрямую содержать элементы, такие как поля или методы

в comp.Main ()

Я запустил cs c .exe следующим образом

cs c / t: exe /out:"C:\output.exe "" C: \ input.cs "

1 Ответ

0 голосов
/ 20 февраля 2020

Не уверен, что это поможет вам, но не могли бы вы попытаться добавить пространство имен вашего приложения просто выше класса, чтобы оно выглядело так:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Также вам не хватает точки с запятой в последней строке в основной функции.

...