【问题标题】:NuGet without cache in VS 2017VS 2017 中没有缓存的 NuGet
【发布时间】:2019-10-17 04:32:11
【问题描述】:

有没有办法告诉 Visual Studio 解决方案在 VS 2017 上恢复包时不要使用 NuGet 缓存?我知道你可以从命令行将 -NoCache 参数传递给 nuget,但是 VS 没有给我设置这些命令行参数的选项。

我已尝试将本地缓存作为项目中的预构建事件清除,但这发生在 nuget 还原之后,因此我必须重新构建两次才能使该解决方案正常工作。

我也尝试过使用 NuGet.Targets 恢复旧的 nuget 包还原方式,但后来我失去了对凭据管理器的使用,因此包完全无法加载。

【问题讨论】:

  • 似乎将属性<RestoreNoCache>true</RestoreNoCache> 添加到您的项目文件应该指示 NuGet 在不使用缓存的情况下进行恢复。这是基于还原目标的文档:docs.microsoft.com/en-us/nuget/reference/…
  • 您还可以将自定义目标添加到您的项目文件<Target name="ClearNugetCaches" BeforeTargets="Restore">...</Target> 并在其中调用 nuget clear 命令,该命令应在评估还原目标之前触发。
  • 不适用于 VS 中的构建。不过,我希望它可以在我们的构建服务器上运行。
  • 添加目标似乎在​​ VS 构建中也不起作用。它可能在 MSBuild 中有效,但我们仍在使用 packages.config 格式
  • 供参考,我试过了:<Target Name="ClearNugetCaches" BeforeTargets="Restore"> <Exec Command=""$(NuGetToolsPath)\nuget.exe" locals all -clear" /> </Target>

标签: msbuild visual-studio-2017 nuget nuget-package-restore


【解决方案1】:

我已经尝试清除本地缓存作为项目中的预构建事件, 但这发生在nuget恢复之后,所以我必须重建 两次才能使该解决方案起作用。

也许您可以尝试使用“构建后”目标来清理缓存?

我的意思是在您有从 A 到 G 的项目的情况下,项目 A 使用一个名为 NugetOne 的包。我们构建了项目 A,NugetOne 将被添加到缓存中。(C:\Users\xxx\.nuget\packages)。

现在我们在项目 B 中工作,该项目也将消耗 NugetOne,我们希望在 VS 中构建项目时在还原之前删除缓存。但是根据上面的cmets,这种方法失败了。

所以也许我们可以添加一个在构建之后运行的目标来清理缓存。我们可以将目标添加到项目 A 或项目 B 以获得类似的结果:

如果我们把它加到A中:在A构建成功后,缓存已经被清理了,那么在构建B的时候,我们就不用担心缓存的影响了。

如果我们将它添加到 B:它就像您使用的预构建事件一样工作,必须重新构建两次才能使其工作。

不确定是不是你想要的,但如果你想要一个开发环境不会受到其他项目缓存的影响。你可以考虑使用Directory.Build.props

Directory.Build.props的内容(添加到/repos文件夹,它会影响你下面的所有解决方案,添加到解决方案,它会影响这个解决方案中的所有项目):

<Project>
 <Target Name="CleanCache" AfterTargets="build">
   <Message Importance="High" Text="Clean the cache..."/>
   <xxx //Do your clean cache action here! />
 </Target>
</Project>

希望它在某些方面有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2017-07-30
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多