ChatGPT解决这个技术问题 Extra ChatGPT

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

我收到以下错误:

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

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

由于新用户发布的低质量答案数量过多,因此投票结束此问题。

V
Vadim Kotov

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

接受的答案不起作用,因为我在多个单独的解决方案中引用该项目。这是唯一的解决办法。评论它,它就像一个魅力。
我可能是错的,但我相信这是“用锤子打苍蝇”。如果由于某种原因,发布的位置丢失了任何其他必需的 nuget 包,它不会出错,给您一个误报(即部署成功,但系统失败)。不是粉丝,但我不会反对它,因为我仍然不熟悉 nuget 的某些方面。
这也对我有用。奇怪的是错误消息被硬编码在 proj 文件本身中......
确认此问题在 VS 2017 中仍然存在。我将项目从 Visual Studio 2015 迁移到 2017 并在 2017 年首次编译时收到此错误消息。这修复了该错误。
为什么要通过这样做来删除功能,冒着破坏项目的风险等?正如@HeyZiko 指出的那样,这可能会导致以后出现问题。我可以做错误状态“启用包还原”的操作。在此页面的某处查看我的答案...
L
Lee Taylor

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

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

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


在移动后将 Microsoft.Net.Compilers... 文件夹从旧包文件夹复制到新包位置(如果它丢失)可能是最后一步。
我刚刚从我的计算机中删除了那个 ONE 包,它工作正常。
在将项目物理移动到 Visual Studio 解决方案中的不同位置时,我也遇到了错误。此页面上的解决方案均无效,因此我制作了项目的副本(在文件系统上)并完全删除了对 VS 中原始项目的所有引用。然后,我重新创建了项目并将零碎的内容复制到其中(从我制作的副本中)。费力,但它奏效了。
将项目从一个位置移动到另一个位置后,我也遇到了同样的问题。修复“.csproj”文件中包的路径修复了该问题。
@MiłoszWieczorek 我尝试在包管理器控制台中运行该命令,但没有解决问题。它重新加载了所有包,但仍然找不到引用。
C
Community

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

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

Update-Package –reinstall

更新:

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

Update-Package –reinstall -ProjectName SampleApp

这对我有用。在一个系统上通过 git 推送更改并将它们拉到另一个系统上之后,我弹出了错误。也许我的 .gitignore 没有为 nuget 包正确配置。
当心......这会更新整个解决方案的包,而不仅仅是项目。
这对我有用。 NuGet 一直抱怨缺少包,但 Visual Studio 不会自动解决。完全运行需要几分钟,但这个命令解决了我的问题。
您可以添加 -ProjectName 参数以使其仅适用于特定项目,而不是整个解决方案。
VS2017 在中途崩溃了,它破坏了一切
R
Ryan Russon

我有这个确切的令人沮丧的信息。最终对我有用的是删除 /packages 中的所有文件和文件夹,并让 VS 在下一次构建时重新获取所有内容。


我右键单击解决方案和Restore Nuget Packages
当我右键单击解决方案时,我没有任何还原 Nuget 包.. 我正在使用 VS 2013..
还必须确保它恢复到正确的包。使用 note/Edit *.csproj 检查 .csproj 以获取包文件夹的位置
A
Abdullah

这种方式解决了我的错误:在 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 中的路径后,我删除了 EnsureNuGetPackageBuildImports 部分,它运行良好。谢谢
为我工作。有点矫枉过正,但其他选项并没有解决问题。
这些条件是检查包是否存在于两个地方。 (有点奇怪,一个就够了)。删除它们的更好选择是修复指向实际包文件夹的路径。是相对的。您的包文件夹可能是 ..\..\packages..\..\..\packages 或类似的。
T
Tom Stickel

提比留是正确的。当文件被移动并导致此问题时,我不得不编辑我的 .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'))" />

最后对我有用的是只编辑文件末尾的行,而不是顶部的行
M
Mohsin Awan

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


但是为什么这些错误首先在哪里呢? Visual Studio 中的错误?
i
innoSPG

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

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

  ----Error---

< /Target>

然后做了

Update-Package -Reinstall

从那里开始,它奏效了。


K
Karthik

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

从 package.config 文件中删除了包 。编辑 .csproj 项目文件并删除以下设置。 此项目引用此计算机上缺少的 NuGet 包。使用 NuGet 包还原下载它们。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 转到包管理器控制台并运行命令 Update-Package –reinstall

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

希望这可以帮助某人。


J
JWP

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

https://i.stack.imgur.com/n2N7B.png


B
Brian Vander Plaats

要在这里扩展一些答案,是的,您可以从 .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 项解决了该问题。


这也适用于当 3.5.0 更新到 3.7.0 时存在恶意错误情况。
C
Caspar Kleijne

只需启用 NuGet 包还原。右键单击您的解决方案 > 选择“启用 NuGet 包还原”。

https://i.stack.imgur.com/CXtf7.jpg

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


谢谢!!我也遇到过类似的情况,并且“启用 NuGet 包还原”有效。
它不适合我,它说“所有软件包都已安装,没有什么可恢复的。”
M
MAK

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

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

m
madannes

对于在这里遇到我遇到的问题的任何人(一些但不是所有软件包都在构建服务器上恢复),对我来说,最后的难题是在我的解决方案的根目录中添加一个 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>

更新:

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

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

P
Peter Ennis

错误信息是完全正确的。我尝试了所有技巧,但都没有奏效。该项目(简单的 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 项目升级过程错误。

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


C
Community

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

升级到 Update 3 安装 Web 开发者工具

https://i.stack.imgur.com/alpUM.png


I
Ian Hale

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


N
Neil Thompson

从 Git 部署时,我遇到了这个问题,因为 Azure 中的构建失败。

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

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


b
bsod_

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

**/packages/*

删除并恢复了我的包文件夹。希望这对其他人有帮助。


N
Nick Rubino

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

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

https://i.stack.imgur.com/loH2P.jpg


u
user1429899

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


P
Parama Dharmika

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

而已


A
Anurag Sharma

注释 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')" />

S
Saravanan

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

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

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


我使用 VS2017、.Net4.7 和一个单元测试项目就遇到了这个问题。该项目被添加到多个解决方案中。自动恢复工作,但到错误的地方。替换为 $(SolutionDir) 工作但更新失败。我问了那个here。你有什么解决办法吗?
p
pkr

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

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

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


k
kayleeFrye_onDeck

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

确保 nuget 安装在 Visual Studio 或独立的构建从属上。如果是后者,请确保它在 PATH 中并跳过步骤 2。打开 VS Dev CMD 控制台,或通过已打开的控制台加载它,您可以按照以下说明进行操作:VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat " 或 VS2017 调用 "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" 调用 nuget restore MyStuff.SLN 或调用 nuget restore MyStuff.csproj 如果没有 SLN。


c
chersull_99

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


I
Irshad Ahmed Akhonzada

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


J
J.P. Sietsma

我意识到这个问题很老了,但是我今天遇到了同样的情况,想为最近发现这个问题的任何人投入 2 美分。我手动移动到解决方案中的子文件夹的 ASP MVC 项目,然后使用 Visual Studio 2017 删除并读取到解决方案中,出现了上述错误。将“lib”和“packages”文件夹移动到与 MVC 项目相同的子文件夹的根目录下解决了我的问题。


b
bmontalvo

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