无法加载文件或程序集“Microsoft.Management.Infrastructure

Posted

技术标签:

【中文标题】无法加载文件或程序集“Microsoft.Management.Infrastructure【英文标题】:Could not load file or assembly 'Microsoft.Management.Infrastructure 【发布时间】:2020-08-11 09:24:31 【问题描述】:

我正在使用 .NET Core 3.1 编写一个多平台 c# 命令行应用程序,该应用程序需要作为单个可执行文件工作。我正在使用 Visual Studio 2019 (16.5.4)。我的操作系统是 Windows 10.0.18363.778,我故意没有安装 Powershell 7。我在我的 Windows 和 WSL Ubuntu 上测试了第一个位,直到我添加了 Powershell SDK 7。安装 Microsoft.Powershell.SDK 7.0.0 之后Ì 如下设置项目文件,一切运行良好,我可以验证我使用的是 PS7 而不是 Windows PS。

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

但是,当我在 PropertyGroup 中添加 runtimeIdentifier 时:

    <RuntimeIdentifier>win-x64</RuntimeIdentifier>    

构建成功完成,没有错误。但是,当我运行(调试或独立运行)并且应用程序点击 Powershell.Invoke 时,它​​会引发 FileNotFound 异常并显示消息:

“无法加载文件或程序集 'Microsoft.Management.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'。系统找不到指定的文件。”

1) 我缺少什么来获取可执行目录中的所有依赖项?

2) 当我添加以下内容来创建单个可执行文件时

    <PublishSingleFile>true</PublishSingleFile>
    <UseAppHost>true</UseAppHost>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>     

它没有被创建。如果我使用,我会得到可执行文件: “dotnet 发布 -r win-x64 -c 调试” 但是当我运行它时没有任何反应。 (此步骤在 PS7 之前可以正常工作) 为了让单个可执行文件运行,我还需要做些什么吗?

【问题讨论】:

我知道这已经晚了,但是将运行时标识符更改为 win10-x64 可以解决问题。 【参考方案1】:

我做了一些研究并得出以下结论: 答案 1:运行时目录中没有运行时标识符特定的 Microsoft.Management.Infrastructure.dll 文件。 Powershell SDK 不支持所有运行时标识符或其存在错误。我会把它带到github上。

答案 2:运行单个可执行文件具有误导性。我的预期结果是创建了一个在应用程序目录中创建的日志文件。我认为当单个 exe 运行时,它实际上将所有文件解压缩到 temp 目录并从那里运行应用程序(不是单个可执行文件),因此不会在单个文件 executabe 所在的位置创建日志文件。

【讨论】:

【参考方案2】:

要解决您的问题,您必须将此引用添加到您的项目中。我花了 1 天时间才找到这个。

<PackageReference Include="NETStandard.Library" Version="1.6.1" />

【讨论】:

以上是关于无法加载文件或程序集“Microsoft.Management.Infrastructure的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]