【问题标题】:Mono on debian error CS0234Mono on debian 错误 CS0234
【发布时间】:2012-07-12 22:06:48
【问题描述】:

我有一个 debian 服务器,我将它的 mac 地址保存在 /usr 文件夹中的一个 txt 文件中。

每次我启动机器时,我尝试执行的脚本都应该检查当前的 mac 地址,并将其与保存在 txt 文件中的地址进行比较。如果它们不匹配,则机器应关闭。

代码可以在 Windows 上运行,但我必须让它在 debian 上运行。所以我安装了单声道(apt-get install mono-complete),创建了包含代码的 .cs 文件并将其传输到 debian 机器上。

当我运行 mcs shutdown.cs(shutdown 是我创建的文件的名称)命令时,我收到此错误:

CS0234:名称空间“System.Net”中不存在类型或名称空间名称“NetworkInformation”。您是否缺少程序集参考?**

如何解决?

using System.Net.NetworkInformation;

      static void Main(string[] args)
      {
          string newmc = Convert.ToString(GetMacAddress()); //current mac address
          string mc = File.ReadAllText(@"/usr/mc.txt"); //mac address saved on a       txt file previously
          if (newmc != mc)   //shutdown if the mac addresses dont match
          {
              System.Diagnostics.Process.Start("shutdown.exe", "-s -t 0"); 
           }
      }
      static string GetMacAddress()
      {
          string macAddresses = "";
          foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
          {
             if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;
             if (nic.OperationalStatus == OperationalStatus.Up)
             {
                macAddresses += nic.GetPhysicalAddress().ToString();
                break;
             }
           }
         return macAddresses;
        }

【问题讨论】:

  • 这个脚本看起来好像是为 Windows 编写的。你需要对谷歌做一些研究,我建议你从研究如何使用命令行关闭机器开始。
  • 立即关闭。但是我不能在cs文件中包含它吗?
  • 是的,我同意它是用胜利的心态写的,因为我不知道 BASH 等。这就是为什么我希望在 MONO 中帮助我。
  • K 2 秒,我正在研究如何在 Ruby 脚本中轻松完成。

标签: c# mono


【解决方案1】:

System.Net.NetworkInformation.NetworkInterface 类在 System.dll 中,根据:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface。您是否尝试在编译时添加对 System.dll 的引用?我相信这是 mcs 的“-r”参数。

顺便说一句,您使用的是哪个版本的 Mono。 Debian 以发布“稳定”风格的非常旧的 Mono 版本而闻名。现在推荐使用 Mono 2.10.x 或更高版本,因为它是稳定的。

【讨论】:

  • 我做了一个 apt-get 更新和升级 =) 版本 2.6.7.. 仍然没有运气 =(
  • 2.6.7 很古老,可能没有 NetworkInformation 命名空间,请按照我说的升级到 2.10.x。
  • ohhhhh 所以我必须用单声道存储库更新我的 soures.list 文件吗?
【解决方案2】:

System.Net.NetworkInformation.NetworkInterface 是在 .NET 2.0 中引入的。如果您想使用它,您需要以 .NET 2.0 配置文件或更高版本为目标。

如果您使用命令行编译器进行编译,请使用 gmcs 或 dmcs 来编译您的项目。 如果您使用的是 MonoDevelop,则需要在项目设置中设置适当的框架版本。

【讨论】:

    【解决方案3】:

    这就是你可以在 Ruby 中执行此操作的方式。

    begin
      theMac = File.read("/usr/path/to/text/file.txt")
    
    rescue Exception => e
      puts e.message
      puts e.backtrace.inspect
    end
    
    response = `ifconfig eth0`
    mac = response.match(/HWaddr (.*?):(.*?):(.*?):(.*?):(.*?):(.*?) /)
    
    if theMac == mac[0] then `sudo shutdown -h now`; end
    
    f = File.open("/usr/path/to/text/file.txt", "w")
    f.write(mac[0])
    f.close()
    

    【讨论】:

    • 他/她没有向您询问 ruby​​ 中的代码...他要求一个典型的谷歌答案。
    • 谢谢大卫,我会立即尝试,非常感谢!
    • @cookiesoft 是的,我意识到了这一点,但是从这里通过回复与 Aaron 交谈,看起来他正在寻找任何语言的简单解决方案,而不是从设计为在 Windows 环境中工作,在 Linux 环境中工作。
    • 嘿,大卫,非常感谢你......只是一个问题,为什么 theMac==mac 而不是 theMac != mac
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2011-12-08
    • 2014-05-25
    • 2011-07-24
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多