我希望设置我的NuGet依赖项:
在VS2013中,我的NuGet依赖项在packages.config中指定
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.3" targetFramework="net45" />
</packages>
我注意到你也可以在.nuspec文件中指定依赖项(很像maven pom文件)但是包管理器插件似乎没有使用它。
<dependencies>
<dependency id="log4net" version="2.0.3"/>
</dependencies>
配置依赖项的正确方法是什么?为什么?
答案 0 :(得分:1)
packages.config 文件列出了当前为给定项目安装的所有软件包。这包括任何依赖项。只要您通过NuGet UI或Package Manager控制台(例如,安装包log4net)添加,更新或删除项目中的包,NuGet就会自动更新此文件。
NuGet将自动安装给定包的任何依赖项。 NuGet还将遵循每个其他软件包的依赖关系链,直到安装所有依赖软件包。它会将这些包添加到 packages.config 文件中,以显示它们已安装。因此,您最初可能会安装一个软件包,但最终可能会根据所有依赖项安装10个软件包。同样,这将反映在 packages.config 文件中,您不应该触摸它。
您无需编辑此文件。
更新 packages.config 的唯一方法是通过NuGet UI或Package Manager控制台安装或更新软件包。不要手动编辑此文件。
编辑:添加有关包恢复的部分
NuGet还使用 packages.config 文件来恢复用户硬盘上不存在的软件包(自动软件包还原)。这很有用,因为您不必将packages文件夹提交到源代码管理。因此,当另一位开发人员签出您的项目时,NuGet会在构建之前自动下载 packages.config 中列出的所有软件包。注意:这与安装包不同。假设您已经使用NuGet来安装软件包,它将更新项目引用,添加文件,修改.config文件等。这些更改应该已经提交。所有程序包还原都会下载二进制文件,就像它们也已提交一样,而不会使您的存储库膨胀。包恢复主要用于从源代码构建项目的其他开发人员。它不适用于安装您创建的包,这是.nuspec文件的用途。
创建OWN软件包以供其他人使用时,将使用 .nuspec 文件。 <dependencies/>
部分列出了您的包所需的包。当开发人员安装您的软件包时,NuGet将自动安装.nuspec中列出的所有依赖项。就像上面一样,NuGet将通过查看每个包.nuspec文件来查看依赖链,以查看它所需的依赖项。
因此,除非您正在创建一个包,否则您不必担心.nuspec文件。
如您所见,NuGet使用每个包中的.nuspec文件来确定是否存在任何依赖项。安装包将更新 packages.config 文件。
TL; DR: packages.config 和 .nuspec 文件虽然有些相关,但却是不同的东西。