.NET 7控制台项目集成PowerShell SDK发布后无法运行求助
问题解决:发布C# PowerShell项目后缺失Microsoft.Management.Infrastructure.dll
问题原因
Microsoft.Management.Infrastructure.dll是Microsoft.PowerShell.SDK的间接依赖,在自包含发布时,.NET的自动裁剪机制会移除代码里没有直接引用的程序集,导致这个DLL被误判为“未使用”而遗漏。调试阶段依赖是从本地NuGet缓存直接加载的,所以不会出现这个问题。
解决方案
方案1:显式添加依赖包引用(推荐)
在项目文件里直接添加Microsoft.Management.Infrastructure的引用,让发布工具明确保留这个依赖:
<ItemGroup> <!-- 新增显式引用 --> <PackageReference Include="Microsoft.Management.Infrastructure" Version="2.0.0" /> <!-- 保留原有的PowerShell SDK引用 --> <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.3.4" /> </ItemGroup>
注:7.3.4版本的Microsoft.PowerShell.SDK对应的Microsoft.Management.Infrastructure版本是2.0.0,版本号保持匹配即可。
方案2:禁用发布裁剪(临时应急)
如果不想添加额外引用,可以通过禁用裁剪来保留所有依赖,但会导致发布包体积大幅增加:
方式一:修改项目文件
<PropertyGroup> <PublishTrimmed>false</PublishTrimmed> </PropertyGroup>
方式二:调整发布命令
去掉--self-contained参数(但要求目标机器已安装.NET 7运行时):
dotnet publish ConsoleApp1.csproj --configuration Release --runtime win-x64 --output pub
验证修改
修改完成后重新执行发布命令,检查pub目录下是否存在Microsoft.Management.Infrastructure.dll,确认后运行程序即可正常执行。
内容的提问来源于stack exchange,提问作者Ritmo2k
相关产品推荐
相关产品推荐

