C# 在Visual Studio 2015解决方案中恢复所有Nuget软件包
我已经在SO和NuGet(以及互联网上)上阅读了许多答案,但我似乎无法克服Visual Studio 2015中NuGet软件包还原的问题。我有以下几种情况 解决方案A结构 --项目A 如果打开并生成解决方案A,我会看到一个对话框,其中显示nuget软件包还原进度和解决方案成功生成 解决方案B结构 --项目A --项目B 但是,假设我从未构建过解决方案A(即,从TFS重新提取),如果我打开并构建解决方案B,我会看到显示nuget软件包还原进度的对话框,但构建失败,因为项目A未能构建 似乎正在发生的是,NuGet正在恢复项目B的包,而不是项目A的包,因此构建失败。说到这里,如果我查看项目B的引用,所有NuGet引用都已解决,但项目A的引用仍然被破坏 有几点:C# 在Visual Studio 2015解决方案中恢复所有Nuget软件包,c#,visual-studio,tfs,nuget,nuget-package-restore,C#,Visual Studio,Tfs,Nuget,Nuget Package Restore,我已经在SO和NuGet(以及互联网上)上阅读了许多答案,但我似乎无法克服Visual Studio 2015中NuGet软件包还原的问题。我有以下几种情况 解决方案A结构 --项目A 如果打开并生成解决方案A,我会看到一个对话框,其中显示nuget软件包还原进度和解决方案成功生成 解决方案B结构 --项目A --项目B 但是,假设我从未构建过解决方案A(即,从TFS重新提取),如果我打开并构建解决方案B,我会看到显示nuget软件包还原进度的对话框,但构建失败,因为项目A未能构建 似乎正在发生
- 我已禁用NuGet的源代码管理集成,因此我没有签入Packages文件夹
- 每个项目都有自己的packages.config文件
- 解决方案B中的构建顺序是项目A,然后是项目B
如有任何想法,将不胜感激 默认情况下,NuGet在解决方案根目录中创建解决方案的
包
文件夹,每个项目将其包DLL引用到该“本地”包文件夹。在您的示例中,如果打开项目A的.csproj文件,您可能会看到引用路径类似于。\packages\[package name]\[etc]
因此,当您从TFS重新提取并构建解决方案B时,Project a找不到其DLL,因为c:\workspace\solution a\packages
还不存在(或者不管您的计算机上有什么绝对路径)
要更正此问题,请使用在c:\workspace\packages
上创建的共享包文件夹。为此,您必须在每个解决方案的NuGet.config中添加一个额外的节点(有关详细信息,请参阅;我还假设您在c:\workspace\solution a\.NuGet
)中有一个NuGet文件夹:
我在这里使用了相对路径,但您也可以使用绝对路径,文档中说您也可以使用%HOME%
执行此操作,然后重新启动Visual Studio。下次打开软件包管理器时,它会询问您是否要恢复丢失的软件包,如果您单击“是”,它会将它们放在新位置。最后一步是编辑.csproj文件,并将
。\packages
的所有实例更改为。\..\packages
(或者您可以卸载并重新安装该软件包,但我发现编辑.csproj要快得多)。要恢复nuget软件包,请执行以下步骤:
- 更改项目属性中的目标框架
- 清洁工程
- 设定以前的目标框架
- 重建项目
我在Visual Studio 2015中开发,但我使用TFS 2013进行源代码控制和构建。尽管我在生成服务器上安装了Visual Studio 2015,但MSBuild仍然引用TFS 2013附带的NuGet版本,而不是VS 2015附带的版本。一旦我从TFS工具目录运行了
nuget update-self
,我的构建工作正常 能否显示.csproj文件和packages.config文件中的相关文本?是的,我们遇到了相同的问题,几乎就像project.json文件被混淆一样。我们已经尝试了一切,在解决方案层添加,在仅项目层添加。似乎只要一个项目涉及多个解决方案,Nuget就会失控。事实上,它会告诉你这些东西已经安装好了,即使参考资料部分清楚地显示了一个黄色指示器。Nuget在过去6个月里变得一团糟。。。您所能做的就是在需要时重新安装,只需单击“管理Nuget卸载”,然后联机查找软件包并重新安装。我已从您的问题中删除了您的答案,因为问题不应包含答案。我添加了一个包含详细信息的列表。如果你想自己添加答案,请告诉我,我会删除维基]谢谢!这纠正了我在本地下拉解决方案时的问题,但是现在当我在构建服务器上启动构建时,只恢复解决方案a的包,而解决方案B失败。如果我登录到构建服务器并在VisualStudio中打开解决方案B并手动进行构建,则包恢复良好,构建成功。我的构建定义中的构建顺序是解决方案A->解决方案B。有什么想法吗?忽略。我能够解决这个问题,并用完整的解决方案更新了我的原始问题。在我的情况下,它是有效的。我希望他们能在2017年解决这个问题。
<config>
<add key="repositorypath" value="..\..\packages" />
</config>