VS 扩展中的 .net 标准库找不到它的依赖项



我有一个VS扩展,目标是.NET 4.6.1。我已经将其中一些重构为由扩展引用的 .NET 标准 2.0 dll。扩展依赖于System.Data.SqlClient,.NET标准dll依赖于Microsoft.Data.SqlClient,作为nuget包添加。问题是,在运行时,我得到...

无法加载文件或程序集"Microsoft.Data.SqlClient,版本=1.11.20045.2,区域性=中性,公钥令牌=23ec7fc2d6eaa4a5"或其依赖项之一

在这个问题之后,我想我会查看 VSIX,果然,Microsoft.Data.SqlClient.dll 光荣地丢失了。我不太擅长参考问题,但似乎这完全超出了我的控制范围?

我真的需要这个工作,并且很乐意屏幕共享或以其他方式帮助任何可以解决我问题的人。如果您希望在原地查看问题,可以克隆 https://github.com/bbsimonbb/query-first.git 然后签出分支目标核心和框架。

问题可能是由 NuGet 依赖项的解析方式引起的。扩展项目"A"引用 .NET 标准项目"B",该项目又依赖于 NuGet 包"Microsoft.Data.SqlClient"。因此,"A"通过"B"对"Microsoft.Data.SqlClient"具有传递依赖关系。换句话说,"A"需要"B"以及 NuGet 包才能工作。

正如我从链接的存储库中看到的那样,您的扩展项目对 .NET Framework 项目使用旧样式格式,而不是像 .NET 标准库那样的新 SDK 样式格式。使用旧项目格式时,项目"A"将仅获取其输出文件夹中的直接依赖项(如"B"(的程序集,而不是 NuGet 包等间接依赖项。这就是找不到程序集的原因。在新的SDK风格的项目和PackageReference中,这些传递依赖关系得到了尊重。因此,包程序集将被复制到输出文件夹或扩展名。

为了实现此目的,您需要将 .NET Framework 项目迁移到新的 SDK 样式格式,并对包使用PackageReference。对于Visual Studio扩展来说,这似乎可能很棘手,但这是可能的,您可以在此问题中找到更多信息。如果在您的情况下无法做到这一点,我想您将不得不求助于对所需程序集的普通旧引用。

最新更新