VS 2017中没有缓存的NuGet

时间:2019-05-31 13:59:44

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

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

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

因此,也许我们可以添加一个在构建后运行的目标以清除缓存。我们可以将目标添加到项目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>

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