Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Visual Studio 2015解决方案中恢复所有Nuget软件包_C#_Visual Studio_Tfs_Nuget_Nuget Package Restore - Fatal编程技术网

C# 在Visual Studio 2015解决方案中恢复所有Nuget软件包

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未能构建 似乎正在发生

我已经在SO和NuGet(以及互联网上)上阅读了许多答案,但我似乎无法克服Visual Studio 2015中NuGet软件包还原的问题。我有以下几种情况

解决方案A结构

--项目A

如果打开并生成解决方案A,我会看到一个对话框,其中显示nuget软件包还原进度和解决方案成功生成

解决方案B结构

--项目A

--项目B

但是,假设我从未构建过解决方案A(即,从TFS重新提取),如果我打开并构建解决方案B,我会看到显示nuget软件包还原进度的对话框,但构建失败,因为项目A未能构建

似乎正在发生的是,NuGet正在恢复项目B的包,而不是项目A的包,因此构建失败。说到这里,如果我查看项目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软件包,请执行以下步骤:

  • 更改项目属性中的目标框架
  • 清洁工程
  • 设定以前的目标框架
  • 重建项目
我希望这会有所帮助。

摘自OPs问题

通常是正确的,但有一些警告。在实现了Cheng建议的更改之后,我能够使用所有项目都会查看的中心“包”文件夹在本地构建所有解决方案,而不管解决方案如何。但我遇到的问题是,当我在TFS中检查这些更改时,我的CI构建启动并失败了

我的CI构建定义将解决方案A和解决方案B构建为默认XAML过程模板的一部分,而不是.proj文件。我看到的错误似乎表明解决方案A正在恢复其包,但解决方案B没有。如果我登录到构建服务器并在VS 2015中打开解决方案B,那么一切正常;在谷歌搜索了几个小时后,我看到了一篇文章,这篇文章最终引导我找到了答案


我在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>