【问题标题】:Public Main() method is required in a public class公共类中需要公共 Main() 方法
【发布时间】:2015-12-17 20:00:44
【问题描述】:

我得到:

公共类中需要公共 Main() 方法

运行此脚本时出错:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

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

    //Shared 256 bit Key and IV here
    const string sKy = "lkirwf897+22#bbtrm8814z5qq=498j5"; //32 chr shared ascii string (32 * 8 = 256 bit)
    const string sIV = "741952hheeyy66#cs!9hjv887mxx7@8y"; //32 chr shared ascii string (32 * 8 = 256 bit)

    var sTextVal = "Here is my data to encrypt!!!";

    var eText = EncryptRJ256(sKy, sIV, sTextVal);
    var dText = DecryptRJ256(sKy, sIV, eText);

    Console.WriteLine("key: " + sKy);
    Console.WriteLine();
    Console.WriteLine(" iv: " + sIV);
    Console.WriteLine("txt: " + sTextVal);
    Console.WriteLine("encrypted: " + eText);
    Console.WriteLine("decrypted: " + dText);
    Console.WriteLine("press any key to exit");
    Console.ReadKey(true);
  }

  public static string DecryptRJ256(string prm_key, string prm_iv, string prm_text_to_decrypt) {

    var sEncryptedString = prm_text_to_decrypt;

    var myRijndael = new RijndaelManaged() {
      Padding = PaddingMode.Zeros,
      Mode = CipherMode.CBC,
      KeySize = 256,
      BlockSize = 256
    };

    var key = Encoding.ASCII.GetBytes(prm_key);
    var IV = Encoding.ASCII.GetBytes(prm_iv);

    var decryptor = myRijndael.CreateDecryptor(key, IV);

    var sEncrypted = Convert.FromBase64String(sEncryptedString);

    var fromEncrypt = new byte[sEncrypted.Length];

    var msDecrypt = new MemoryStream(sEncrypted);
    var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);

    csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);

    return (Encoding.ASCII.GetString(fromEncrypt));
  }

  public static string EncryptRJ256(string prm_key, string prm_iv, string prm_text_to_encrypt) {

    var sToEncrypt = prm_text_to_encrypt;

    var myRijndael = new RijndaelManaged() {
      Padding = PaddingMode.Zeros,
      Mode = CipherMode.CBC,
      KeySize = 256,
      BlockSize = 256
    };

    var key = Encoding.ASCII.GetBytes(prm_key);
    var IV = Encoding.ASCII.GetBytes(prm_iv);

    var encryptor = myRijndael.CreateEncryptor(key, IV);

    var msEncrypt = new MemoryStream();
    var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);

    var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);

    csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
    csEncrypt.FlushFinalBlock();

    var encrypted = msEncrypt.ToArray();

    return (Convert.ToBase64String(encrypted));
  }

}

我还没有开始理解错误在哪里。

【问题讨论】:

  • 以下答案并不完全重复,但可能会回答您的问题:stackoverflow.com/questions/14688756/…
  • 您能否发布在 Visual Studio 中显示的异常的屏幕截图?我主要对 what 想要那种方法感兴趣。至于为什么不使用public作为你的输入方法:msdn.microsoft.com/en-us/library/acy3edy3.aspx
  • 您能否确认您是通过Web IDE(例如.NET Fiddle)构建的?此错误在正常情况下不会发生,但 Google 显示 .NET Fiddle 会发出很多此错误。 C# 语言规范当然不要求 Main 公开访问。
  • @JeppeStigNielsen 即使在 .Net Fiddle 中我也无法得到错误...
  • @Thomas 不,不是问题的代码,你是对的。但是,如果您在 .NET Fiddle 中创建一个新的控制台项目,然后限制对 Main 或包含它的类 (Program) 的访问,您可以获得引用的消息。此消息 Public Main() method is required in a public class 不能来自兼容的 C# 编译器。

标签: c#


【解决方案1】:

.NET Fiddle 的解决方案 原帖四年后....net Fiddle 上的控制台编译要求包含 main 方法的类和静态 main 方法都必须标记为 public。

由于小提琴应用程序的执行从“运行”按钮开始,而不是从命令行键入的命令开始,我猜“args”只是被忽略了。不过命令行输入还是可以用Console.ReadLine();来完成的

我在 anon fiddle 上找到的一个简单示例:

public class Program
{
    public static void Main(string[] args)
    {
            int number;
            string inputData = Console.ReadLine();

            if(int.TryParse(inputData, out number))
            {
                if (number > 0)
                { 
                    Console.WriteLine("You typed " + number + ". This is a postive value");
                    Console.ReadLine();
                }
                else if (number < 0) 
                {
                    Console.WriteLine("You typed" + number+ ". This is a negative value");
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("You typed" + number + " (zero).");
                    Console.ReadLine();
                }
            }
            else
            {
              Console.WriteLine("The input was not a valid integer.");
            }
    }
}

许多'console-ations'期待(如原始海报).net fiddle 像控制台应用程序一样工作,希望这会有所帮助!

【讨论】:

    【解决方案2】:

    尝试在main 方法中删除string[] args 它对我有用。

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2013-07-30
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多