【问题标题】:Missing Automation from namespace 'System.Management'. Missing assembly reference命名空间“System.Management”中缺少自动化。缺少程序集参考
【发布时间】:2015-02-07 02:22:00
【问题描述】:

系统:Windows 7 Professional 64 位,PowerShell v 2.0,无 Visual Studio(无法安装等)

尝试从 C# 运行 PowerShell。这是代码sn-p:

using System;
using System.Management.Automation;  

class Hello {
    static void Main(string[] args) {           
        PowerShell ps = PowerShell.Create();
        ps.AddCommand("Get-Process");
        Console.WriteLine("Process                 Id");
        Console.WriteLine("----------------------------");
        foreach (PSObject result in ps.Invoke()) {
            Console.WriteLine(
            "{0,-24}{1}",
            result.Members["ProcessName"].Value,
            result.Members["Id"].Value);
            } 
        }       
    }

错误:

e:\foo.cs(2,25):错误 CS0234:命名空间“System.Management”中不存在类型或命名空间名称“Automation”(您是否缺少程序集引用?)

由于没有 Visual Studio,我以原始方式运行代码。由于错误,我从http://www.dll-found.com/system.management.automation.dll_download.html 下载了dll,并按照说明放置在目录中。重启机器后,没有成功。

首先,我想问一个一般性问题。如何安装缺少的程序集或 dll 文件(仅),因为对于某些人来说,您可能必须安装整个 Windows 或 PowerShell SDK 或 .NET Framework。

编辑
我已将下载的 dll 文件放在 C:\Windows\SysWOW64、C:\Windows\system32、C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 和 C:\Program Files\Reference Assemblies\Microsoft\Framework \v3.0。

我正在编译使用: C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /target:exe /out:E:\foo.exe E:\foo.cs

【问题讨论】:

  • 您是否添加了参考 System.Management.Automation.dll
  • 你如何编译你的文件?如果您直接运行csc.exe,则必须在其命令行中指定所有引用,而不仅仅是将 dll 文件“复制”到同一目录。

标签: c# .net powershell


【解决方案1】:

警告:切勿在任何正常情况下从随机网站下载 DLL。尽可能使用 NuGet 包(或您的项目首选的包管理器)。如果找不到 DLL,几乎总是有充分的理由,您需要找出它是什么并修复它,而不仅仅是从互联网上获取 DLL。

如果您在将旧项目重新定位到例如 .NET 4.8 后遇到此问题,那是因为 NuGet 包名称已更改。

  • 卸载包System.Management.Automation
  • 安装包Microsoft.PowerShell.5.1.ReferenceAssemblies(NuGet)

这个包名出现在命名空间System.Management.Automation中的类的documentation中。

【讨论】:

    【解决方案2】:

    NuGet 为我工作。

    PM> 安装包 System.Management.Automation.dll -Version 10.0.10586

    【讨论】:

      【解决方案3】:

      你必须使用/reference命令行参数到csc.exe,在MSDN中描述:

      C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /reference:system.management.automation.dll /target:exe /out:E:\foo.exe /E:\foo.cs
      

      【讨论】:

      • 在我接受你的回答之前(它有效),你能评论两件事吗?从dll-found.com下载dll/文件好不好?通常会在哪些路径中搜索参考 dll 文件,这样我就可以只将 dll 文件放入该文件夹中。或者我可以放在任何驱动器或文件夹中?
      • 从那里下载文件不太好,因为您可能在一组文件上需要不同的版本、处理器架构等,而不仅仅是一个文件。你需要一个一致的文件版本。只有当你不知道这些 dll 来自哪里时,你才可以从 dll-found.com 下载它们,但你必须知道它们不匹配的公共接口可能存在问题。
      • 感谢 kpa6uk 提供信息。谷歌搜索一下就可以找到第二件事的答案。
      • 哦,我忘了第二个问题,抱歉)
      • @msinfo 下载随机 DLL 并链接它们是一个糟糕的主意,并且可能导致感染病毒。使用官方文档找出您需要的 DLL,并从可信赖的来源获取。在任何正常情况下都不应使用分发随机 DLL 的网站。
      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多