【问题标题】:What is the connection between Packages and Assemblies in Visual Studio?Visual Studio 中的包和程序集之间有什么联系?
【发布时间】:2025-12-03 03:55:02
【问题描述】:

在试图找出这个问题的解决方案(没有双关语):How can I get my Web API app to run again after upgrading to MVC 5 and Web API 2?,我意识到我已经忽略了包和引用的程序集之间的关系(没有给他们太多考虑)。

那么是什么的关系呢?我使用 NuGet 管理包,并通过项目的 References 文件夹下的上下文菜单管理程序集,但我仔细观察后发现它们之间似乎存在 1:1 的对应关系。

例如,我的项目的 NuGet 包管理器中有实体框架,并且我还有对实体框架的程序集引用。然而,这种通信并没有延伸到所有领域。

毕竟,在选择上下文菜单项后(我不知道是来自 Visual Studio 还是 Resharper)“删除未使用的引用”,我引用了 14 个项;但在 NuGet 包管理器中,我在“已安装的包 | 全部”表中列出了 30 个包。

然而,当我突出显示它们时,它们带有一个“管理”按钮;似乎在其他项目中,他们用绿色复选标记或其他东西说“已安装”...???

【问题讨论】:

    标签: resharper assemblies nuget nuget-package visual-studio-2013


    【解决方案1】:

    一个包由 1 个或多个程序集组成。它还可以包含其他非程序集(也称为非 dll 文件),但这是查看它们的简单方法。

    当您将“包”添加到您的 Visual Studio 项目时,会发生一些事情。

    1. 创建了一些 xml,说“这个包是这个项目的一部分(例如 csproj)。
    2. 包所需的 1 个或多个程序集下载到本地。
    3. 必要的参考被添加到您的项目中(例如csproj)。这个逻辑写在 nuget 包中。这会模仿您执行“右键单击/添加引用”。
    4. 可能会发生其他事情,但以上是简单版本。

    了解包的一个好/快速的方法是

    获取 MyPackage.nupkg 文件。 将扩展名....从“.nupkg”重命名为“.zip”。 并查看 .zip 文件的内容。

    你会看到类似的文件夹

    .\content
    .\lib
    .\lib\net20
    .\lib\net40
    

    并寻找一些 .ps1 文件.......有时也会显示一些巫术。

    这是简单的版本。但它会让你离开地面。

    【讨论】: