C# .nuget文件夹为什么解决方案有它?

C# .nuget文件夹为什么解决方案有它?,c#,nuget,C#,Nuget,在工作中我们不使用nuget,即使在我的个人项目中我也使用它,我不明白为什么我下载的很多解决方案都有它,通常有3个文件 Nuget.config、exe和target 有人能解释一下为什么人们会将此文件夹添加到他们的解决方案中吗 感谢在过去的好日子里,文件夹是NuGet软件包还原的关键角色(NuGet.targets就是证明)。但是由于新的恢复机制已经就位,因此只有NuGet.exe是有用的 你可以从NuGet.org上读到更多内容 更新: 链接文章已更新并移动到 如果仔细阅读以上内容,MSB

在工作中我们不使用nuget,即使在我的个人项目中我也使用它,我不明白为什么我下载的很多解决方案都有它,通常有3个文件

Nuget.config、exe和target

有人能解释一下为什么人们会将此文件夹添加到他们的解决方案中吗


感谢

在过去的好日子里,文件夹是NuGet软件包还原的关键角色(NuGet.targets就是证明)。但是由于新的恢复机制已经就位,因此只有NuGet.exe是有用的

你可以从NuGet.org上读到更多内容

更新:

链接文章已更新并移动到

如果仔细阅读以上内容,MSBuild 15还添加了NuGet包还原支持


我想补充一下Lex Li的回答。
.nuget
文件夹中的另一个重要文件是
nuget.config
文件,特别是如果您使用的是来自nuget.org以外的其他提要的nuget包

假设您已按如下方式配置了另一个包源:

当您在本地计算机上添加或恢复包时,一切都会正常工作,因为nuget知道从哪里获取包。当您在持续集成(CI)服务器(如Visual Studio Team Services)上编译解决方案作为构建的一部分时,nuget软件包的还原/安装可能会失败,因为CI服务器不知道从何处获取软件包

因此,如果将包源添加到
.nuget/nuget.config

然后,您可以使用配置文件还原/安装nuget软件包-我在Visual Studio Team Services中就是这样做的:


从nuget 2.7+开始,此文件夹不再需要,可以安全删除。此外,如果使用Visual Studio命令行提示符,则应该能够从那里以及从包管理器访问Visual Studio中的nuget.exe

要在使用nuget 2.6或更早版本的项目中启用自动包还原,您可能需要从*.csproj文件底部手动删除以下内容:

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    <Error Condition="!Exists('..\..\packages\MSBuildTasks.1.5.0.214\build\MSBuildTasks.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSBuildTasks.1.5.0.214\build\MSBuildTasks.targets'))" />
  </Target>

此项目引用此计算机上缺少的NuGet包。启用NuGet软件包还原以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。

hi,为什么NuGet.exe很有用?您的解决方案中还有它吗?如果没有命令行工具,任何没有IDE(Visual Studio/Xamarin Studio/MonoDevelop)的人都无法轻松还原NuGet包(通过NuGet.exe还原您的.sln)。因此,是的,我仍然将它放在我的项目中,比如我会说,
NuGet.config
仍然有用,在某些情况下甚至是必需的(如果您使用的是除官方存储库之外的任何NuGet存储库)。它允许您配置NuGet存储库,以便在还原期间在其中搜索包。@OleksandrKobylianskyi由于还原现在已在脚本中,您还可以通过命令行“源”开关设置NuGet源,这使得配置文件变得不必要。这是真的。但我想您也希望VisualStudio能够自行恢复包以供本地开发。因此,
NuGet.config
是实现这一点的方便方法:它被VS自动还原识别,并可以传递到命令行
NuGet.exe
调用。最后你只能在一个地方指定NuGet来源。哇,这还不清楚。您的意思是手动将以下内容添加到nuget 2.6或更早版本的解决方案中?您的XML指向一个.nuget文件夹,您说该文件夹在2.7版之后不再使用。@gravidthinks-要使您的项目符合现代nuget标准,您应该删除我指出的XML标记。我希望这能澄清问题,确实如此。非常感谢。