添加WMPLib NuGet包为PackageReference后代码无法识别该命名空间
解决WMPLib NuGet包用PackageReference无法识别的问题
问题核心原因
你碰到的CS0246错误,本质是当前PackageReference的资产配置缺失了compile项——现有IncludeAssets里没包含编译阶段需要的程序集资产,导致编译器找不到WMPLib的命名空间和类。另外,WMPLib属于系统COM组件的互操作程序集,这类包在PackageReference模式下的处理逻辑和普通NuGet包有差异,容易出现引用失效的情况。
可行解决方案
方案1:修正PackageReference的资产配置
直接修改项目csproj文件里的PackageReference节点,给IncludeAssets补充compile值:
<PackageReference Include="WMPLib"> <Version>1.0.0</Version> <IncludeAssets>runtime; build; native; contentfiles; analyzers; compile</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference>
修改后保存项目,右键项目选择「还原NuGet包」,再重新编译即可。
方案2:改用packages.config模式
切换到packages.config确实能解决问题,这种模式下NuGet会自动把WMPLib的互操作程序集复制到项目的packages目录,并直接添加到项目引用中,兼容性更稳定。操作步骤:
- 右键项目→「管理NuGet程序包」→ 点击右上角设置图标→ 选择「Package Reference」→ 切换为「packages.config」→ 重新安装WMPLib包。
方案3:直接添加系统COM引用(最可靠)
跳过NuGet,直接引用系统自带的Windows Media Player COM组件:
- 右键项目→「添加」→「引用」→ 切换到「COM」标签→ 找到并勾选「Windows Media Player」→ 点击确定。
VS会自动生成对应的互操作程序集,无需依赖NuGet,彻底避免包引用的问题。
内容的提问来源于stack exchange,提问作者ffonz
相关产品推荐
相关产品推荐

