为啥 nuget dll 显示在 Visual Studio 2019 的项目根目录中?

Posted

技术标签:

【中文标题】为啥 nuget dll 显示在 Visual Studio 2019 的项目根目录中?【英文标题】:Why the nuget dll shows in project root in Visual Studio 2019?为什么 nuget dll 显示在 Visual Studio 2019 的项目根目录中? 【发布时间】:2022-01-01 17:55:55 【问题描述】:

我的解决方案中有一个 SDK 项目。我需要添加一个 NuGet 包(“customLib.net”),它提供了查找文件之间差异的功能。

如果您创建一个简单的 .Net Framework 4.7.2 控制台应用程序并将此 NuGet 添加到其中,那么它将自动下载它以及所有依赖项,包括“ customLib.redist.windows.x64"。据我了解,“customLib.net.dll”是 .net 的 API,“customLib.dll”(来自“customLib.redist.windows.x64”包) 本身就是一个引擎,为 win-x64 编译。包存储在 SolutionFolder/packages 中。还有一个包含所有必需参考的 package.config 文件。一切都按预期进行。

但是如果要将相同的 NuGet 包添加到具有相同目标的 SDK(类库)项目:.Net Framework 4.7.2,它也应该下载NuGet 包以及所有依赖项。它确实如此。但它不会将包存储在 SolutionFolder/packages 文件夹中,并且没有任何 package.config 文件。它将它们存储在 C 驱动器上的全局 NuGet 存储中。而问题是,当我启动应用程序时,它在运行时抛出异常

"Unable to load DLL 'customLib': The specified module could not be found.". 

并且此 dll 不存在于输出文件夹中。我通过将 "customLib.redist.windows.x64" NuGet 包下载到项目中解决了这个问题,尽管 "customLib.net" 已经引用了这个包。这对我来说有点奇怪,下面是问题:

    为什么,如果 "customLib.net" 依赖于 "customLib.redist.windows.x64",它不会将依赖的 dll 复制到输出文件夹?同时,控制台应用程序会复制这两个库。 为什么在下载 "customLib.redist.windows.x64" NuGet 后 "customLib.dll" 文件显示在 Visual Studio 的项目根目录中,完整路径为“ C:\Users\MyUsr\.nuget\packages\customLib.redist.windows.x64\1.0.1\runtimes\win-x64"?

【问题讨论】:

【参考方案1】:

根据描述,我可以假设您拥有 .NET 标准控制台应用程序,但您在其中添加了 .Net 核心类库。这就是您面临此类问题的原因。

因为在.NET core库项目中,没有package.config文件,直接在csproj文件中添加了引用。以及下载到用户目录的包,而不是包文件夹。

因此,您需要将 .NET 标准类库添加到您的项目中,而不是添加 .Net 核心库

要了解更多信息,请参阅What is the difference between .NET Core and .NET Standard Class Library project types?

【讨论】:

没有。控制台应用程序没有任何问题,它的目标是:.Net Framework 4.7.2。它按预期工作。我的 SDK 项目有问题,它是 .Net Framework 4.7.2 的类库

以上是关于为啥 nuget dll 显示在 Visual Studio 2019 的项目根目录中?的主要内容,如果未能解决你的问题,请参考以下文章

VS(Visual Studio)中Nuget的使用

如何在没有nuget.exe或Visual Studio扩展的情况下下载Nuget包?

Visual Studios 2015 NuGet Ghostscript 安装错误

如何下载没有 nuget.exe 或 Visual Studio 扩展的 Nuget 包?

为啥 Visual Studio 在调试时会跳过我的方法?

为啥在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?