NuGet, Packages.config, .csproj and references

8
我有一个问题,希望更好地了解NuGet包、packages.config和.csproj文件。
据我了解,NuGet包管理器中的默认包管理格式设置决定了您的项目是使用packages.config还是.csproj文件来解析和恢复包。在我的项目中,我们选择了Packages.config。
这没有问题,它可以编译和运行。所以我决定测试一下,如果.csproj文件中没有dll的引用,它是否能够运行,因为我认为它不需要使用或需要这个。这是一个错误的假设,因为尽管包在packages.config文件中,但是当我删除.csproj文件中的引用时,我的项目出现了错误,无法编译。
我还注意到,如果Solution Explorer中的引用中没有dll,它也会编译失败(我认为这些是.csproj引用)。
因此,我不清楚csproj文件在Packages.config管理格式的NuGet包和Solution Explorer中的引用中的作用。

1
要百分之百清楚:你是在谈论.NET Framework还是.NET Standard/Core? - ProgrammingLlama
8
当您向项目添加Nuget包引用时,Packages.config将被修改以更新项目使用的Nuget包列表,而.csproj文件将被修改以添加属于该包的库路径。因此,如果您手动修改.csproj文件并删除DLL引用,那么它肯定会出错,因为在packages.config中有条目与在.csproj文件中添加引用是不同的。 Nuget包可能针对不同的.NET框架具有多个库,因此添加包时.csproj文件将引用适当的库。 - Chetan
@john 这是 .Net 框架。 - Darren
@Chetan Ranpariya,您是否愿意将您的评论发布为答案? - Darren
1
刚遇到了这个问题,非常令人困惑。让你更加感激npm。 - ihor.eth
显示剩余2条评论
2个回答

8

7

在 VS2017 和 .NET Core 之前,NuGet 没有与 MSBuild 深度集成,因此需要一个单独的机制来列出项目中的依赖关系:packages.configproject.json。使用 Visual Studio 解决方案资源管理器的“引用”上下文菜单,开发人员将恢复的包添加到 NuGet 管理的解决方案级文件夹中的 .csproj 引用中。

Visual Studio 添加到项目文件 .csproj 的引用看起来像这样:

<Reference Include="EntityFramework, Version=6.0.0.0"><HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath></Reference>

从 VS2017 和 .NET Core 开始,NuGet 成为 MSBuild 中的一流公民。现在,NuGet 包依赖项将作为 SDK 样式项目文件 .csproj 中的 PackageReference 列出。

现在引用看起来是这样的:

<PackageReference Include="EntityFramework" Version="6.4.4" />


开发人员手动集成MSBuild。您能添加一个代码片段示例吗? - ryanwebjackson
1
@ryanwebjackson更新了答案,并提供了示例代码片段。这里没有涉及C#代码,因为MSBuild使用XML来描述C#项目。 - JuanG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接