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

A .net standard lib in a VS extension can't find it's dependency

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

Could not load file or assembly 'Microsoft.Data.SqlClient, Version=1.11.20045.2, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5' or one of its dependencies

之后,我想我会查看 VSIX,果然,Microsoft.Data.SqlClient.dll 不见了。我不太擅长参考问题,但这似乎完全不在我的掌控之中?

我真的需要它来工作,并且很乐意分享屏幕或以其他方式帮助任何可以解决我的问题的人。如果您更愿意在原地查看问题,可以克隆 https://github.com/bbsimonbb/query-first.git 然后检查分支 target-core-and-framework.

您的问题可能是由于 NuGet dependencies are resolved. 您的扩展项目“A”引用了 .NET Standard 项目“B”,而后者又依赖于 NuGet 包“Microsoft.Data.SqlClient”。因此,“A”通过“B”对“Microsoft.Data.SqlClient”具有传递依赖性。换句话说,“A”需要“B”以及 NuGet 包才能工作。

正如我从链接存储库中看到的那样,您的扩展项目使用 .NET Framework 项目的旧式格式,而不是像您的 .NET Standard 库那样使用新的 SDK-style format。使用旧项目格式时,项目“A”将仅在其输出文件夹中获取 direct 依赖项的程序集,如“B”,而不是 indirect 依赖项像 NuGet 包。这就是找不到程序集的原因。使用新的 SDK 样式项目和 PackageReference,这些传递依赖性得到尊重。因此,程序包程序集将被复制到您的输出文件夹或扩展。

为了完成这项工作,您需要 your .NET Framework project to the new SDK-style format and use PackageReference for packages. It seems that this might be tricky for Visual Studio extensions, but it is possible and you can find more on it in this 。如果这在您的情况下是不可能的,我想您将不得不求助于对您需要的程序集使用普通的旧引用。