缺少 NuGet 包

NuGet Packages are missing

我搜索了这个问题,但 none 的解决方案有效。我安装了 Visual Studio Professional 2015,并且正在使用 TFS。我的 NuGet 版本是 3.1.6。这个问题只发生在我的 C# Web API/MVC 项目中。

我收到以下错误:

This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props

  1. 我的解决方案中没有 .nuget 文件夹。
  2. 我在解决方案中有一个 packages 文件夹,当我删除它时,似乎 NuGet 确实重建了依赖项,但项目仍然存在上述错误。
  3. 我尝试从 TFS 中删除该项目,但没有修复它。
  4. 除了上述错误外,项目中的所有引用都有黄色警告标志,并表示它们丢失了。
  5. 当我检查项目的 NuGet 包管理器时,所有 "missing" 旁边都有一个绿色勾号,包括 Microsoft.Net.Compilers.
  6. 我尝试添加一个新的 Web API/MVC 项目,它遇到了类似的问题,其中大多数参考文献(例如 Owin)"missing" 带有黄色警告标志。

我今天遇到了同样的错误(丢失了完全相同的包裹)。我还创建了一个 MVC + Web API 项目。

发生这种情况是因为我将应用程序文件(包括 .csproj)文件移动到了另一个位置。我手动更新了 .sln 文件,但所有包依赖项现在(Visual Studio 2015)存储在 .csproj 文件中。

编辑 .csproj 文件并更正解决方案文件夹(包含包文件夹)的相对路径解决了我的问题。

注意 - 这会更新整个解决方案的包,而不仅仅是项目。

如果您在构建解决方案时又缺少一个 nuget 包并给出错误,请使用以下命令使用 Nuget 命令控制台从工具 > Nuget 包管理器 > 包管理器控制台。它将重新安装您所有当前的软件包。

Update-Package –reinstall

更新:

您可以将特定的项目名称作为参数传递。

Update-Package –reinstall -ProjectName SampleApp

我收到了这条令人沮丧的消息。最终对我有用的是删除 /packages 中的所有文件和文件夹,并让 VS 重新获取下一个构建的所有内容。

错误信息完全正确。我尝试了所有技巧,none 奏效了。该项目(简单的 MVC Web 应用程序测试)从 Windows 8.1 VS 2015 社区移动到我在 Windows 10 上的新测试框。应用了 VS 2015 的所有最新更新。 我什至无法安装任何更新版本的编译器包。

Loop:
<LOOP>This seems to be a Ground Hog Day phenomena.</LOOP>
GoTo Loop

我终于将 Microsoft.Net.Compilers.1.0.0 从旧项目复制到新项目中,并且成功了。 然后我可以开始将其他包更新到更新的版本。 对我来说看起来像是一个 nuget 项目升级过程错误。

注意:原始项目是在 VS 2015 中创建的,没有任何遗留的 nuget 方法。

Tiberiu 是正确的。我不得不编辑我的 .csproj 文件,因为文件被移动并导致了这个问题

 <Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />

我更改了文件顶部和底部

<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />

我正在使用 VS2012 并面临同样的错误。我从 .csproj 文件中删除了以下 Target 标记,它开始编译时没有任何错误。

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  -- Error messages within Target Tag
</Target>

我通过从 .csproj 文件中删除这段代码解决了我的问题:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

这 2 个答案的组合对我有用。首先,我修改了 .csproj 文件以删除对 1.0.0 版本的引用

< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >

  ----Error---

< /Target>

然后

Update-Package -Reinstall

来自 并且有效。

我找不到任何解决方案,因此我将 nuget.exe 的副本和 powershell 脚本添加到名为 prebuild.ps1 的解决方案的根目录中,内容如下。

$nugetexe = 'nuget.exe'
$args = 'restore SOLUTION_NAME_HERE.sln'
Start-Process $nugetexe -ArgumentList $args

我在 Pre-Build 脚本路径

的构建中调用了这个 powershell 脚本

对于任何遇到我遇到的问题的人(一些但不是所有的包都在构建服务器上恢复),对我来说最后的难题是在我的根目录中添加一个 NuGet.config解决方案,与 .SLN 文件同级,正如 David Ebbo 在此处解释的那样:http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html.

来自 Ebbo 的博客 post,我的文件内容很简单

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

更新:

NuGet API URL 已更改为 v3(截至 2016 年 9 月)。来自 https://www.nuget.org/

<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />

对我来说,问题是当我将解决方案复制到一个新文件夹并打开它时,它缺少 Nuget 文件夹,如下所示。我复制了这个文件夹,一切正常。注意:这个相同的文件夹在我们的源代码管理中,但不在这个解决方案项目中,它在一个目录中。

当我复制包文件夹以及解决方案文件和项目文件夹时,我的工作正常。我只是没有从以前的地方复制包文件夹。

我通过从 .csproj 文件中删除以下代码解决了这个问题

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets'))" />

您也可以使用建议的错误消息作为提示。方法如下,找到Manage Packages for Solution,点击resolve missing nuget package。

就是这样

适用于我的解决方案 - Visual Studio 2015 Enterprice,项目 .NET 4.6.1

  1. 升级到更新 3
  2. 安装网络开发者工具

要扩展此处的一些答案,是的,您可以从 .csproj 文件中删除以下块:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

这解决了这个问题,但是在我的例子中,我注意到我对 .NET.Compilers 和 .CodeDom.Providers 有不同版本的额外引用:

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.0.1
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\

当我的 packages.config 仅引用以下内容时:

<package id="Microsoft.Net.Compilers" version="2.0.1"
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3"

从 .csproj 文件中删除 1.0.0 项目解决了这个问题。

只需启用 NuGet 包还原。 右键单击您的解决方案 > 选择 'Enable NuGet Package Restore'.

这将创建包含 NuGet.Config 文件的 .nuget 文件夹并解决我的问题。

WebConfig中注释编译器选项:

<!--<system.codedom>
<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
</system.codedom>-->

Update the Latest Version of Packages in Package Config File

  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.4" targetFramework="net452" />

如果一切正常,则重建,无需继续,否则 右键单击该项目,单击 'unload project' 再次右键单击该项目并编辑 .csproj 文件

验证Codedom的路径,之前的路径中没有net45,手动添加,保存,加载,重建。它应该有效。

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />

正如许多人建议的那样,删除 <Target> 标签可能会使其可编译。但是,当您为测试项目执行此操作时,请注意它会产生副作用。

编译时出现与 MSTest.TestAdapter nuget 包相关的错误。通过删除 <Target> 标记解决了该问题。虽然它使构建成功,但测试方法变得不可发现。测试资源管理器不会列出该项目中的测试方法,运行 测试或调试测试也不会起作用。

我在使用 Visual Studio 2017.Net framework 4.7 时遇到了这个问题,它很可能在其他版本中发生

我的问题是 NuGet 无法自动 get/update 包,因为完整的文件路径太大。 通过将我的解决方案移动到我的文档中的文件夹而不是深度嵌套的文件夹来修复

然后可以右键单击解决方案和 select "Restore NuGet Packages"(如果您只是构建它并让它为您完成,这可能不是必需的),然后 select "Manage NuGet Packages for Solution" 将所有软件包更新到最新版本。

这是针对从 Microsoft 网站下载的示例 ASP MVC 应用程序的解决方案。

对于 DevOps/build 工程师,您可能可以针对受影响的 SLN 或项目修复此 运行 nuget restore,如果您缺少 SLN。我必须为所有 UWP 项目的 CI/CD 构建执行此操作。

  1. 确保 nuget 以 Visual Studio 或独立的方式安装在构建从站上。如果是后者,请确保它在 PATH 中并跳过第 2 步。
  2. 要么打开 VS Dev CMD 控制台,要么通过已经打开的控制台加载它,您可以按照以下说明进行操作:
    VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat"

    VS2017 call "%ProgramFiles(x86)%\Microsoft Visual Studio17\Enterprise\Common7\Tools\VsDevCmd.bat"
  3. call nuget restore MyStuff.SLNcall nuget restore MyStuff.csproj 如果没有 SLN。

对我来说,包在正确的路径下,但包文件夹中的构建文件夹不在。我只是删除了它说丢失的所有包并重建了解决方案,它成功地创建了构建文件夹和 .props 文件。所以错误信息是正确的,告诉我有什么东西是错过的。

不确定这是否对任何人有帮助,但是当我从本地机器上删除源代码而没有将解决方案文件保存到 TFS 时,我遇到了这个问题。 (在初始开发期间,我在解决方案资源管理器中右键单击并签入项目,但忘了签入解决方案本身。)当我需要再次处理此问题时,TFS 中只有 .csproj 文件,没有 .sln 文件。所以在 VS 中我做了一个文件 --> 源代码管理 --> 高级 -- 从服务器打开并打开 .csproj 文件。从那里我做了一个全部保存,它问我想在哪里保存 .sln 文件。我将此 .sln 文件与其他文件夹(App_Data、App_Start 等)一起保存到项目目录,而不是顶级目录。我终于发现我需要将 .sln 文件保存到项目文件夹中的一个目录中,以便它与项目文件夹处于同一级别。我所有的路径都解决了,我能够再次构建它。

从 Git.

部署时,我在 Azure 中遇到了这个失败的构建问题

原来我的 .gitignore 从 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props.

中排除了 build 文件夹

build 文件夹(强制)提交到 Git 后,问题就解决了。

对我来说,我的 gitignore 文件忽略了我的包文件夹。以下 gitignore 行导致了问题 -

**/packages/*

删除并恢复了我的包文件夹。希望这可以帮助别人。

我解决了这个错误,实际上我的包文件夹中有不同版本的 MSTest.TestAdapter(1.3.2),在 .csproj 文件引用中指向 MSTest.TestAdapter( 1.1.0)。我已将所有 MSTest.TestAdapter(1.1.0) 替换为 MSTest.TestAdapter(1.3.2),这解​​决了我的问题。

我意识到这个问题已经过时了,但是我 运行 今天遇到了同样的情况,并且想为最近发现这个问题的任何人投入我的 2 美分。我使用 Visual Studio 2017 手动移动到解决方案中的子文件夹然后删除并重新添加到解决方案的 ASP MVC 项目出现了上述错误。将 "lib" 和 "packages" 文件夹移动到与 MVC 项目相同的子文件夹的根目录解决了我的问题。

我遇到了同样的问题,事实证明我引用的项目之一在解决方案目录之外(因此没有共享相同的“/packages”文件夹)。对我有用的解决方案是打开参考项目的解决方案并在那里构建它。构建该项目后,错误就消失了。

这样解决了我的错误: 要在 Visual Studio 2015+ 解决方案资源管理器中打开 .csproj 文件进行更新:

右键单击项目名称 -> 卸载项目

右键单击项目名称 -> 编辑 .csproj

删除以下行:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
    <Error Condition="!Exists('packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>

右键单击项目名称 -> 重新加载项目

最终构建您的解决方案。

注释掉 .csproj 中的以下代码

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Costura.Fody.2.0.1\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.2.0.1\build\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.3.1.3\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.3.1.3\build\Fody.targets'))" />

我的解决方案中的文件夹名为“.NET 项目”。通过将其重命名为 "NET Project" 一切正常。所以开头的点是个坏主意。

在我的例子中,*.csproj 文件中缺少 <RestorePackages>true</RestorePackages>。没有必要删除我在之前的答案中看到的代码片段。

不同的用户名是造成这种情况的常见原因,Nuget 将所有内容下载到:"C:\Users\USER_NAME\source\repos" 如果您之前将项目设置为不同的用户名.csproj 文件可能仍然包含旧用户名,只需打开它并搜索替换 "C:\Users\_OLD_USER_NAME\source\repos""C:\Users\NEW_USER_NAME\source\repos"

这似乎有多种原因。

对我来说,.csproj 文件包含对 Microsoft.Bcl.Build.targets 的两个不同版本的引用:

<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>


<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
</Target>

我删除了旧的引用,问题就解决了。

如果将 package.config 与此构建命令一起使用,也会出现此错误

MSBuild.exe /t:Restore MySln.sln

在这种情况下,要么切换到 nuget restore 命令,要么使用 PackageReference

我通过以下步骤解决了同样的问题

  1. 已从 package.config 文件中删除包 <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net46" />
  2. 编辑 .csproj 项目文件并删除以下设置。 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">     <PropertyGroup>       <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>     </PropertyGroup>     <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />   </Target>

    1. 转到程序包管理器控制台并运行命令Update-Package –reinstall

第 2 点和第 3 点是由其他用户给出的,我感谢这些用户。第 1 点,从 package.config 文件中删除 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 更为重要。此外,在 运行 执行第 3 点中提到的命令后,问题已解决。删除了所有不需要的包并更新了所需的包参考。

希望这对某人有所帮助。

0

我了解到有趣的事情,关于 Visual studio 中的 nuget 引用 对于 nuget 引用,我们可以通过引用或 package.config 文件添加 As。

在 Visual Studio 2017 年 - 字母顺序或 nuget 引用由 VS 自动处理。

但在 Visual Studio 2019 年。如果您的 nuget 引用不是按字母顺序排列的,那么 VS 不会在引用文件夹中加载文件。

所以为了尝试修复。 --从.csproj/vbproj或package.config.

中删除所有的所有引用

-- 保存在记事本中。尝试通过 Nuget 包管理器添加它们。

-- 第一次尝试1。安装后。

-- 右击解决方案 -> 恢复所有 nuget 包。

-- 您现在会看到它加载了一个 nuget 引用。

-- 现在一个一个做。

-- 如果您 100% 确定您的参考文献顺序是按字母顺序排列的。只需将它们全部粘贴到 .csproj/vbproj 或 package.config.

-- 恢复解决方案上的所有 nuget。

您会看到所有符号都将被加载。 -- 还有一件事通过解决方案资源管理器中的顶部图标刷新您的参考文件夹。

引用愉快。