我一直在试图弄清楚为什么Visual Studio 2015中的自动包还原不起作用。 据我了解,除了检查几个设置外,没有什么可做的。在构建时,它会查找缺少的包并自动下载它们。 我有一个有15个单独项目的解决方案。由于“缺少包裹”,他们中的大多数将无法编译。
我在任何这些项目中都没有任何遗留的NuGet(.nuget文件夹等),而且我有最新版本的NuGet。
Visual Studio根本不会下载丢失的文件。我删除了解决方案包文件夹,它在我构建时重新创建并下载了所有包,但是每个单独的项目仍然显示缺少的引用。 如果我转到包管理器控制台并发出
Update-Package -reinstall
然后包下载,一切正常。我只是想知道为什么它不会自动执行此操作。 它应该是对的吗?
答案 0 :(得分:0)
NuGet Restore仅恢复packages目录中的文件,但不会恢复项目中的文件或修改项目。
例如,如果有一个包将添加一些参考dll或将一些内容文件添加到您的项目中。从项目中删除这些引用dll和内容文件后,恢复此程序包时将不会添加它们。这将导致您的项目在编译时无法找到丢失的pacakges。
因此我们需要使用“Update-Package -reinstall”命令强制将包引用和内容文件重新安装到项目中。
更新团队中共享项目的示例:
以下是我的解决方案结构,CommDLL项目安装了一些NuGet包,整个解决方案由源控件管理。
我从源代码控制中使用另一个用户帐户在另一台机器上下载此解决方案,并将另一个NuGet包安装到CommDLL项目中。然后使用新安装的包中的一些内容并成功构建项目。请确保包dll已添加到您的项目中,并且已在.csproj文件中设置了正确的HintPath。
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
接下来,我将此修改后的项目签入到源代码管理中。请确保 .csproj文件和packages.config文件已在中签入。
现在我在另一台机器上获得最新版本以获取修改后的内容。从源代码管理中检出最新版本后,将显示包引用并显示警告,因为项目未编译,这意味着不会还原包。请重建此项目,它将为您的项目设置(确保您的Visual Studio 2015已启用“允许NuGet下载丢失的软件包“和”在重建此项目之前,在Visual Studio中构建期间自动检查缺少的包“。