Visual Studio 2015项目缺少所有引用

72

从今天开始,属于一个包含20个项目的解决方案中的WPF项目,将所有引用设置为丢失状态。

enter image description here

我刚刚检查了MS的建议和Stackoverflow上的其他回答,但都没有起作用……我尝试从SVN重新获取解决方案,但没有成功,其他同事没有遇到这个问题。我还尝试过删除并重新添加引用(例如System.Xml)。但是无法让它工作...... 有什么建议吗?谢谢。
更新#1: 这是csproj文件。
 <ItemGroup>
<Reference Include="Catel.Core, Version=4.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.Core.4.2.0\lib\net40\Catel.Core.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Catel.Extensions.Controls, Version=4.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.Extensions.Controls.4.2.0\lib\net40\Catel.Extensions.Controls.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Catel.Extensions.FluentValidation, Version=4.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.Extensions.FluentValidation.4.2.0\lib\net40\Catel.Extensions.FluentValidation.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Catel.Fody.Attributes, Version=2.8.0.0, Culture=neutral, PublicKeyToken=1c8163524cbe02e6, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.Fody.2.8.0\lib\portable-net4+sl4+wp7+win8+wpa81+MonoAndroid14+MonoTouch40\Catel.Fody.Attributes.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Catel.MVVM, Version=4.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.MVVM.4.2.0\lib\net40\Catel.MVVM.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="MethodTimer, Version=1.15.7.0, Culture=neutral, PublicKeyToken=cb1364609f40a1dc, processorArchitecture=MSIL">
  <HintPath>..\packages\MethodTimer.Fody.1.15.7.0\Lib\portable-net4+sl5+wp8+win8+wpa81+MonoAndroid16+MonoTouch40\MethodTimer.dll</HintPath>
  <Private>False</Private>
</Reference>
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="ServiceStack">
  <HintPath>..\packages\ServiceStack.4.0.46\lib\net40\ServiceStack.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="ServiceStack.Client, Version=4.0.46.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\ServiceStack.Client.4.0.46\lib\net40\ServiceStack.Client.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="ServiceStack.Common">
  <HintPath>..\packages\ServiceStack.Common.4.0.46\lib\net40\ServiceStack.Common.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="ServiceStack.Interfaces, Version=4.0.0.0, Culture=neutral, PublicKeyToken=e06fbc6124f57c43, processorArchitecture=MSIL">
  <HintPath>..\packages\ServiceStack.Interfaces.4.0.46\lib\portable-wp80+sl5+net40+win8+monotouch+monoandroid+xamarin.ios10\ServiceStack.Interfaces.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="ServiceStack.Text, Version=4.0.46.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\ServiceStack.Text.4.0.46\lib\net40\ServiceStack.Text.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.IO.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Net" />
<Reference Include="System.Runtime, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Runtime.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Threading.Tasks, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Threading.Tasks.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Catel.MVVM.4.2.0\lib\net40\System.Windows.Interactivity.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Telerik.Windows.Controls, Version=2015.2.728.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL">
  <HintPath>..\packages\Telerik.Windows.Controls.for.Wpf.40.Xaml.2015.2.728\lib\net40\Telerik.Windows.Controls.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Telerik.Windows.Controls.GridView, Version=2015.2.728.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL">
  <HintPath>..\packages\Telerik.Windows.Controls.GridView.for.Wpf.40.Xaml.2015.2.728\lib\net40\Telerik.Windows.Controls.GridView.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Telerik.Windows.Controls.Input, Version=2015.2.728.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL">
  <HintPath>..\packages\Telerik.Windows.Controls.Input.for.Wpf.40.Xaml.2015.2.728\lib\net40\Telerik.Windows.Controls.Input.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Telerik.Windows.Controls.Navigation, Version=2015.2.728.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL">
  <HintPath>..\packages\Telerik.Windows.Controls.Navigation.for.Wpf.40.Xaml.2015.2.728\lib\net40\Telerik.Windows.Controls.Navigation.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Telerik.Windows.Data, Version=2015.2.728.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL">
  <HintPath>..\packages\Telerik.Windows.Data.for.Wpf.40.Xaml.2015.2.728\lib\net40\Telerik.Windows.Data.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="UIAutomationProvider" />
<Reference Include="UIAutomationTypes" />
<Reference Include="WindowsBase" />

是的,我使用Nuget,其他19个点指向相同的程序集......没有移动任何内容。
更新#2
由于我无法继续进行,所以我从同事那里复制了项目,现在它可以工作了....我认为文件系统出了问题...已经比较了解决方案,它们是相同的。

你能复制粘贴.csproj文件的相关部分吗? - Peter Szekeli
bin和obj文件夹是否为空或丢失?您尝试过重新生成吗?您使用NuGet吗? - Jehof
可能你无法访问包含库的文件夹,要么是因为它们不存在,要么是因为你没有权限,有可能是有人更改了路径,导致它们无法正常工作。请检查 csproj 寻找它们的位置,如果可以自己找到它们就好了。 - mikus
1
它缺少对System等内容的引用,这似乎表明这不仅仅是一个简单的缺失文件夹。 - Bradley Uffner
其他项目都正常运行... - advapi
10个回答

204

这个问题的解决方法是:

每当您将一个项目导入到VS 2015中,它都会修改您的.csproj文件。因此,为了解决它,请右键单击.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>

然后构建您的解决方案,它应该能够工作。


9
对于不知道如何找到 .csproj 文件进行编辑的任何人,您可以右键单击项目并选择 Unload Project,然后就可以编辑 .csproj 文件了。 - Rajshekar Reddy
6
你可以导航到保存项目的目录,右键点击.csproj文件并编辑。 - George Saad
1
谢谢,你节省了我的时间。 - Michael Samteladze
是的!经过大量的故障排除,这终于让我成功添加引用而不会出现黄色三角形 - 谢谢! - jbyrd
2
有人知道微软为什么会做出这样的事情吗?这给我带来了很多烦恼!谢谢。 - K. R.
显示剩余6条评论

10
在解决方案的根目录下,删除/packages/文件夹中的所有内容,然后重新构建。

2
对我来说,它完美地运行了。所有的包都从TFS下载并在我的本地机器上损坏了。应用了这个解决方案后,它被重新构建而没有任何问题。感谢@mmcrae。 - Robert Ostrowicki
我刚刚删除了整个包文件夹,但它也起作用了。 - Ju66ernaut

10

可以帮助强制重新构建Nuget包。进入Nuget控制台,使用以下命令:(TOOLS > Options > Package Manager > Package Manager Conbsole)

Update-Package -reinstall -ProjectName "MyProject" -safe

安全参数实际上不会更新软件包,而只会重新安装它们。如果这没有帮助,您可以尝试实际更新它们(但确保您有项目的副本,以防万一。)

Update-Package -reinstall -ProjectName "MyProject"

要强制更新一个软件包,请使用:

Update-Package -id Microsoft.Package.Name -ProjectName "MyProject"

这个解决方案对我很多次都有效,证明了达到目标的方法不止一种。 - JStevens

3

我曾经遇到过这种问题,是由于 .targets 导入文件损坏所致。请检查是否意外启用了 nuget 包恢复功能(该功能包括一个 .targets 文件),然后删除了 .nuget 目录。


我曾经遇到过类似的问题...奇怪的是,在更新了我的NuGet包之后,所有的引用都被恢复了。 - jan-seins
1
@jan-seins - 你所说的“更新我的NuGet包”是什么意思?你在VS中做了什么? - Don Cheadle
@mmcrae - 我刚刚进入“工具”>“NuGet程序包管理器”>“解决方案的NuGet程序包”。在更新中,我有一个待处理的System.Data.SQLite更新。更新后,所有引用都得到了恢复。我不是说这是一个解决方案。这只是对我有效的方法。 - jan-seins

2
我遇到了类似的问题。对我有用的解决方案是弹出解决方案的NuGet包管理器并刷新包。
另一种情况涉及缺少的包,解决方案的NuGet包管理器显示需要安装的更新和依赖项,这就是解决方法。
还有一种情况与上面指出的完全相同-删除包文件夹可以解决问题。
手动编辑项目是一种选择,但如果您在不应该操作的地方进行操作,则可能无法打开项目。如果可以的话,我的建议是避免这样做。

1
如果你在nuget的packages文件夹中缺少.targets文件,就可能会出现这个错误。在我的情况下,它是在packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets中。
通常,当我将软件包添加到git存储库中时(普通的.gitignore文件在任何地方都会忽略构建文件夹),并在另一台计算机上检出时,就会出现这种情况。
提示:你可以修改.gitignore文件以包括packages文件夹中的所有文件。将这些行追加到底部即可:
# Include all files in NuGet packages directory
!/packages/**/

1

我在一个包含大约20个项目的解决方案中刚刚遇到了这种情况。只有一个项目受影响,它失去了所有引用,包括标准的.NET程序集。

我唯一能解决的方法是切换到不同的GIT分支,然后再切回来,这样就清理了问题,现在一切都正常了。


1
我在一个包含大约10个项目的解决方案中,也曾遇到了与VS2015完全相同的问题。只有一个项目——主要的MVC项目——受到了影响,它失去了所有引用,包括标准的.NET程序集。
问题出在我的web.config文件上。我注释掉了一些行,导致xml文件无效。

0

对我来说,我错误地从.csproj文件中删除了以下行:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

所以我关闭了Visual Studio。打开了myprojectname.csproj文件并添加了这一行代码。 然后我重新打开了解决方案,通过这样做我成功解决了我的问题。


-2

卸载项目,然后编辑项目

查找以下内容并删除。

此项目引用了在此计算机上缺失的NuGet包。启用NuGet包恢复以下载它们。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=322105。缺失的文件是{0}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接