在试图找出这个问题的解决方案(没有双关语): How can I get my Web API app to run again after upgrading to MVC 5 and Web API 2? 时,我意识到我已经忽略了包和引用的程序集之间的关系(没有给他们太多考虑)。
那么这种关系是什么?我使用 NuGet 管理包,并通过项目引用文件夹下的上下文菜单管理程序集,但仔细检查后发现,其中一些程序集之间似乎存在 1:1 对应关系。
例如,我的项目的 NuGet 包管理器中有 Entity Framework ,而且我还有对 EntityFramework 的程序集引用。然而,这并不是全面的通信。
毕竟,在选择上下文菜单项(我不知道它是来自 Visual Studio 还是 Resharper)“删除未使用的引用”后,我引用了 14 个项目;但在 NuGet 包管理器中,我在“已安装的包 | 全部”表格中列出了 30 个包。
然而,当我突出显示它们时,它们都带有“管理”按钮;似乎在其他项目中他们说“已安装”并带有绿色复选标记或其他东西......???
最佳答案
一个包由 1 个或多个程序集组成。它还可以包含其他非程序集(也称为非 dll 文件),但这是查看它们的简单方法。
当您向 Visual Studio 项目添加“包”时,会发生一些事情。
- 创建了一些 xml,表示“此包是此项目的一部分(例如 csproj)。
- 该包所需的 1 个或多个程序集已下载到本地。
- 必要的引用已添加到您的项目中(例如 csproj)。这个逻辑是写在nuget包里面的。这模仿您执行“右键单击/添加引用”。
- 可能会发生其他情况,但以上是简单版本。
了解包的一个好/快速的方法是
获取 MyPackage.nupkg 文件。 将扩展名重命名...从“.nupkg”到“.zip”。 并查看 .zip 文件内容。
您会看到类似的文件夹
.\content
.\lib
.\lib\net20
.\lib\net40
并查找一些 .ps1 文件......有时也会显示一些巫术。
这是简单的版本。但它会让你起步。
关于resharper - Visual Studio 中的包和程序集之间有什么联系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19459166/