我试图添加WMPLib nuget包作为对我的项目的包引用,但在代码中找不到这些类。
这在我的csproj文件中:
<PackageReference Include="WMPLib">
<Version>1.0.0</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
在我的cs文件中,我有:
using WMPLib;
这就是错误:
error CS0246: The type or namespace name 'WMPLib' could not be found (are you missing a using directive or an assembly reference?)
在这里我读到";该问题是由于新的NuGet格式引用"PackageReference"。。。不添加文件夹和文件";。
有人对此了解更多吗?解决方案是否使用package.config而不是包引用?
好的,我能够重现您的问题,还找到了一些解决方法。
问题
在我看来,最初的WMPLib
NuGet包在某种程度上被破坏了/并没有真正符合当今NuGet的期望。我这么认为是因为以下两个指标:
- 通常,nuget.org显示包的所有兼容目标框架,但对于
WMPLib
,它只显示.NETFramework(请参阅此处(-但显示哪个版本?将其与Newtonsoft.Json
进行比较 - 在使用dotPeek或7-Zip分析包时,我在
lib
文件夹中找到了程序集。但通常,它们在lib<<TFM>>
内部,例如libnet48
解决方法
我已经使用dotPeek提取了两个程序集AxInterop.WMPLib.dll
和Interop.WMPLib.dll
,并将它们保存在C:tempNewWMPLiblibnet35
中
然后我创建了以下文件C:tempNewWMPLib.nuspec
:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>NewWMPLib</id>
<version>1.0.0</version>
<authors>me</authors>
<owners>me</owners>
<description>Lorem ipsum</description>
</metadata>
</package>
最后,我通过nuget pack C:tempNewWMPLib.nuspec
构建了一个新的NuGet包。
当通过NuGet使用此包时,现在编译以下代码:
using WMPLib;
namespace ConsoleApp4
{
internal class Program
{
static void Main(string[] args)
{
var windowsMediaPlayerClass = new WindowsMediaPlayerClass();
}
}
}
免责声明
我不是律师,我不知道遵循我的变通方法是否合法。