首页 文章

缺少NuGet包

提问于
浏览
222

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

我收到以下错误:

此项目引用此计算机上缺少的NuGet包 . 使用NuGet Package Restore下载它们 . 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105 . 丢失的文件是.. \ packages \ Microsoft.Net.Compilers.1.0.0 \ build \ Microsoft.Net.Compilers.props

  • 我的解决方案中没有.nuget文件夹 .

  • 我在解决方案中有一个packages文件夹,当我删除它时,似乎NuGet重建了依赖项,但项目仍然有上述错误 .

  • 我尝试从TFS中删除项目,但没有修复它 .

  • 除了上述错误,项目中的所有引用都有黄色警告标志,并说它们丢失了 .

  • 当我检查项目的NuGet包管理器时,"missing"旁边的所有内容都有一个绿色勾号,包括Microsoft.Net.Compilers .

  • 我尝试添加一个新的Web API / MVC项目,它遇到了类似的问题,其中大多数引用如Owin是带有黄色警告标志的"missing" .

27 回答

  • 281

    我今天遇到了同样的错误(错过了完全相同的包) . 我还创建了一个MVC Web API项目 .

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

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

  • 1

    我通过从 .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>
    
  • 0

    如果您还有一个缺少的nuget包在构建解决方案时出现错误,请使用“工具”>“Nuget包管理器”>“包管理器控制台”中的Nuget Command Console使用以下命令 . 它将重新安装您当前的所有包 .

    Update-Package -reinstall

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

  • 0

    我有这个令人沮丧的消息 . 最终对我有用的是删除/ packages中的所有文件和文件夹,并让VS重新获取下一个版本的所有内容 .

  • 5

    提比略是对的 . 我不得不编辑我的.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'))" />
    
  • 37

    我通过从.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'))" />
    
  • 0

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

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

    然后呢

    Update-Package -Reinstall
    

    从它和它工作 .

  • 7

    Just enable NuGet Package Restore. 右键单击您的解决方案>选择'Enable NuGet Package Restore' .

    Right click your solution > choose 'Enable NuGet Package Restore'

    这将使用NuGet.Config文件创建.nuget文件夹并修复我的问题 .

  • 0

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

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

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

    enter image description here

  • 5

    要在此处扩展一些答案,是的,您可以从.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项修复了该问题 .

  • 0

    不确定这是否会对任何人有所帮助,但是当我从本地计算机删除源代码而没有将解决方案文件保存到TFS时,我遇到了这个问题 . (在初始开发期间,我右键单击并在解决方案资源管理器中检查项目,但忘记检查解决方案本身 . )当我需要再次处理此问题时,我在TFS中所拥有的只是.csproj文件,没有.sln文件 . 所以在VS中我做了一个文件 - >源代码控制 - >高级 - 从服务器打开并打开了.csproj文件 . 从那里我做了一个Save All,它问我想要保存.sln文件的位置 . 我将此.sln文件保存到项目目录中,其他文件夹(App_Data,App_Start等),而不是顶级目录 . 我终于弄明白我需要将.sln文件从项目文件夹中保存到目录中,这样它就与项目文件夹处于同一级别 . 我的所有路径都已解决,我能够再次构建它 .

  • 8

    对于那些偶然发现我遇到的问题的人(有些但不是所有的包都在构建服务器上恢复),对我来说最后一块拼图是在我的解决方案的根目录中添加一个NuGet.config,同时添加到.SLN正如David Ebbo在这里解释的那样:http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html .

    从Ebbo的博文中,我的文件内容很简单

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

    UPDATE:

    NuGet API URL已针对v3进行了更改(截至2016年9月的当前状态) . 来自https://www.nuget.org/

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

    错误消息完全正确 . 我尝试了所有的技巧,但都没有奏效 . 该项目(简单的MVC Web App测试)从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项目升级过程错误给我 .

    NOTE: 原始项目是在VS 2015中创建的并且没有任何遗留的nuget方法 .

  • 0

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

    • 升级到更新3

    • 安装Web开发人员工具

    Visual studio installation wizzard

  • 0

    对我来说,包在正确的路径下,但包文件夹中的构建文件夹不是 . 我只是删除了它说缺少的所有软件包并重新构建了解决方案,并成功创建了构建文件夹和.props文件 . 所以错误消息是正确的告诉我有些事情是错过的 .

  • 0

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

  • 207

    我找不到任何解决方案,所以我将nuget.exe和powershell脚本的副本添加到名为prebuild.ps1的解决方案的根目录中,其中包含以下内容 .

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

    我在我的构建中调用了这个powershell脚本 Pre-Build script path
    enter image description here

  • 0

    当我将包文件夹与解决方案文件和项目文件夹一起复制时,我工作了我只是没有从以前的地方复制包文件夹 .

  • 5

    您还可以使用建议的错误消息作为提示 . 这是如何找到管理解决方案包,然后单击解决缺失的nuget包 .

    而已

  • 1

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

    在程序包配置文件中更新最新版本的程序包

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

    重建如果一切正常,无需继续,否则右键单击项目,单击“卸载项目”再次右键单击项目并编辑.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')" />
    
  • 11

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

    编译时我收到了与 MSTest.TestAdapter nuget包有关的错误 . 通过删除 <Target> 标记解决了该问题 . 虽然它使构建成功,但测试方法变得无法发现 . 测试资源管理器也赢得了工作 .

    我在使用 Visual Studio 2017.Net framework 4.7 时遇到过这种情况,在其他版本中很可能会发生这种情况

  • 0

    对我来说问题是NuGet无法自动获取/更新包,因为完整的文件路径太大了 . Fixed by moving my solution to a folder in my Documents instead of a deeply nested folder .

    然后可以右键单击解决方案并选择“Restore NuGet Packages”(如果您只是构建它并且让它为您执行它可能不是必需的),然后选择“Manage NuGet Packages for Solution”以获取所有包更新到最新版本 .

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

  • 12

    对于DevOps /构建工程师,您可以针对受影响的SLN修复此运行 nuget restore ,如果缺少SLN,则可以进行项目修复 . 我必须为我们所有的UWP项目进行CI / CD构建 .

    • 确保在Visual Studio或独立版本的构建从站上安装了nuget . 如果它在PATH中's the latter, make sure it'并跳过步骤2 .

    • 打开VS Dev CMD控制台,或通过已打开的控制台加载它,您可以按照以下说明操作:
      VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat"
      要么
      VS2017 call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"

    • call nuget restore MyStuff.SLNcall nuget restore MyStuff.csproj 如果没有SLN .

  • 1

    从Git部署时,我将此问题作为Azure中的失败构建 .

    结果我的.gitignore从 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props 中排除了 build 文件夹 .

    一旦 build 文件夹(强制)提交给Git,问题就解决了 .

  • 0

    对我来说,我的gitignore文件忽略了我的包文件夹 . 以下gitignore线导致了这个问题 -

    **/packages/*
    

    删除并恢复我的包文件夹 . 希望这有助于其他人 .

  • 15

    我意识到这个问题已经过时了,但是今天我遇到了同样的情况,想要投入我的最近发现此问题的人最多2美分 . 一个ASP MVC项目我手动移动到我的解决方案中的子文件夹,然后使用Visual Studio 2017删除并读回解决方案,提出了错误 . 将“lib”和“packages”文件夹移动到与MVC项目相同的子文件夹的根目录修复了我的问题 .

相关问题