添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I searched this problem but none of the solutions worked. I have Visual Studio Professional 2015 installed and I am using TFS. My NuGet version is 3.1.6. This problem is happening only in my C# Web API/MVC project.

I am getting the below error:

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

  • I do not have .nuget folder in my solutions.
  • I have a packages folder in the solution and when I delete it, it seems like NuGet does rebuild the dependencies but the project still has the above error.
  • I tried removing the project from TFS and it didn't fix it.
  • Along with the above error, all the references in the project have yellow warning signs and say they are missing.
  • When I checked the NuGet Package Manager for the project, everything that is "missing" has a green tick next to it, including Microsoft.Net.Compilers.
  • I tried adding a new Web API/MVC project and it faced a similar problem where most references such as Owin were "missing" with the yellow warning sign.
  • I solved my issue by removing this code from .csproj file:

    <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>
                    Accepted answer would not work since I am referencing the project in multiple separate solutions. This was the only fix. Commented it out and it worked like a a charm.
    – Levi Fuller
                    Apr 12, 2016 at 16:55
                    I could be wrong, but I believe this is "swatting the fly with the hammer". If, for whatever reason, the published location loses any other required nuget package, it will not error, giving you a false positive (i.e. deployment succeeds, but system fails). Not a fan, but I'm not going to downvote it because there are aspects of nuget I'm still not familiar with.
    – HeyZiko
                    Oct 6, 2016 at 23:04
                    Confirmed this issue still exists in VS 2017.  I migrated a project from visual studio 2015 to 2017 and got this error message upon first compile in 2017.  This fixed the bug.
    – Tom McDonald
                    Apr 28, 2017 at 18:18
                    Why delete functionality, risk your project breaking etc by doing this? As @HeyZiko points out this can lead to problems later on. I could just do what the error states "Enable package restore". See my answer somewhere on this page...
    – Nicow
                    May 9, 2017 at 11:13
                    I think this is not a good answer, it is something like if any testcase is not passing then comment that and you task is done. But that is not a way..  You must have find the root cause and resolve it, rather than commenting or removing such code..
    – Sachin
                    Jul 1, 2017 at 11:17
    

    I had the same error (missing exactly the same package) today. I also created a MVC + Web API project.

    It happened because I moved the app files (including the .csproj) file to another location. I manually updated the .sln file but all packages dependencies are now (Visual Studio 2015) stored in .csproj file.

    Editing the .csproj file and correcting the relative path to the solution folder (which contains the packages folder) solved the problem for me.

    Copying the Microsoft.Net.Compilers... folder from the old packages folder to the new packages location after a move if it is missing may be a final step required. – Justin Wignall Nov 6, 2015 at 14:14 I also got the error when physically moving a project to a different location in the Visual Studio solution. None of the solutions on this page worked, so I made a copy of the project (on the file system) and completely removed all reference to the original project in VS. I then recreated the project and copied the bits and pieces into it (from the copy I made). Laborious, but it worked. – Andrew Jens Aug 25, 2016 at 0:05 I also had the same issue after moving project from one location to another. Fixing path of the packages in the ".csproj" file fixed the issue. – Nirman May 8, 2017 at 13:50 @MiłoszWieczorek I tried running the command in Package Manager Console and it did not solve the issue. It reloaded all packages, but the references are still not found. – Francisco d'Anconia Jul 5, 2017 at 21:17

    BEWARE - this updates packages for the entire solution not just the project.

    If you have one more missing nuget package that giving your error while building your solution use following command using Nuget Command Console from Tools > Nuget Package Manager > Package Manager Console. It will reinstall your all current packages.

    Update-Package –reinstall
    

    Update:

    You can pass specific project name as a parameter.

    Update-Package –reinstall -ProjectName SampleApp
                    This worked for me. The error popped up after for me after pushing changes through git on one system and pulling them on another. Maybe my .gitignore is not properly configured for nuget packages.
    – Patrick Borkowicz
                    Jan 18, 2016 at 20:44
                    This worked for me. NuGet kept complaining about missing packages, but Visual Studio would not auto-resolve. It took a couple minutes to run completely, but this command fixed my problem.
    – Nick Alexander
                    Sep 7, 2016 at 3:55
                    You can add -ProjectName parameter to make it only for specific project, not entire solution.
    – Miłosz Wieczorek
                    May 25, 2017 at 17:06
    

    this way solved my error : To open .csproj file for update in Visual Studio 2015+ Solution Explorer:

    Right-click project name -> Unload Project

    Right-click project name -> Edit .csproj

    Remove the following lines :

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

    Right-click project name -> Reload Project

    Finally Build your solution.

    After fixing manually the paths in csproj I removed the section EnsureNuGetPackageBuildImports and it worked perfectly. thanks – willyMon Apr 15, 2019 at 19:44 Those conditions are checking that packages exists in two places. (a bit odd, one is enough). A better alternative to deleting them is to fix the path to point to the actual packages folder. It's relative. Your package folder is likely ..\..\packages or ..\..\..\packages or similar. – CervEd Sep 28, 2021 at 7:31 I donot have any Restore Nuget Package when I right click on solution.... I am using VS 2013.. – Ziggler Apr 29, 2016 at 23:52 also had to make sure that it restores to the right package. check the .csproj using note/Edit *.csproj for the location of the packages folder – AceMark Apr 29, 2019 at 10:05

    Tiberiu is correct. I had to edit my .csproj file as the files were moved and caused this issue

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

    I changed at top of the file and at the bottom

    <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'))" />
                    what did work for me in the end was to edit only the line at the end of the file, but not at the top
    – ISAE
                    Feb 16, 2016 at 22:05
    

    I solved this issue by removing the following code from .csproj file

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

    A combination of the 2 answers worked for me. First I modified the .csproj file to remove the reference to 1.0.0 version

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

    and then did

    Update-Package -Reinstall
    

    from the and it worked.

  • Removed package <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net46" /> from package.config file.
  • Edit the .csproj project file and removed the below settings. <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>

  • Go to package manager console and run the command Update-Package –reinstall
  • Point # 2 and 3 were given by other users and I appreciate those users. Point # 1, removing the Microsoft.CodeDom.Providers.DotNetCompilerPlatform from package.config file is more important. Also, after running the command mentioned in point #3, the issue resolved. All unwanted packages removed and required package reference updated.

    Hope this helps someone.

    To expand on a few of the answers here, yes you could remove the following block from your .csproj file:

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

    and this fixes the issue, however in my case, I noticed that I had additional references to the .NET.Compilers and .CodeDom.Providers with different versions:

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

    When my packages.config only referenced the following:

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

    Removing the 1.0.0 items from the .csproj file fixed the issue.

    This also applies when there is a rogue error condition referring to 3.5.0 when it has been updated to 3.7.0. – Andrew Morton Aug 27, 2020 at 12:06 It didn't wok for me, it says "All packages are already installed and there is nothing to restore." – Dalibor Jun 6, 2017 at 11:15

    I am using VS2012 and facing the same error. I removed the following Target tag from the .csproj file and it started compiling without any error.

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

    The error message is completely correct. I tried all the tricks and none worked. The project (simple MVC Web App test) moved from Windows 8.1 VS 2015 Community to my new test box on Windows 10. All the latest updates to VS 2015 applied. I could not even install any newer version of the compilers package.

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

    I finally just copied Microsoft.Net.Compilers.1.0.0 from the old project into the new one and it worked. I could then start to update other packages to newer version. Looks like a nuget project upgrade process bug to me.

    NOTE: The original project was created in VS 2015 and does not have any legacy nuget methodologies.

    For anyone who stumbles here with the issue I had (some but not all packages being restored on a build server), the final piece of the puzzle for me was adding a NuGet.config in the root of my solution, sibling to the .SLN file as David Ebbo explained here: http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html.

    From Ebbo's blog post, the file contents for me are simply

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

    UPDATE:

    The NuGet API URL has changed for v3 (current as of Sept 2016). From https://www.nuget.org/

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

    Solution that works in my case - Visual Studio 2015 Enterprice, project .NET 4.6.1

  • Upgrade to Update 3
  • Install Web developer tools
  • For me, the packages were there under the correct path, but the build folders inside the package folder were not. I simply removed all the packages that it said were missing and rebuilt the solution and it successfully created the build folders and the .props files. So the error messages were correct in informing me that something was a miss.

    I had this issue as a failed build in Azure, when deployed from Git.

    Turns out my .gitignore was excluding the build folder from ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props.

    Once the build folder was (force) committed to Git, the issue was solved.

    For me my gitignore file was ignoring my packages folder. The following gitignore line was causing the issue -

    **/packages/*
    

    Removed and it restored my packages folder. Hope this helps someone else.

    A different user name is the common cause for this, Nuget downloads everything into: "C:\Users\USER_NAME\source\repos" and if you had the project previously setup on a different user name the .csproj file may still contain that old user name there, simply open it and do a search replace for "C:\Users\_OLD_USER_NAME\source\repos" to "C:\Users\NEW_USER_NAME\source\repos".

    There seem to be multiple causes for this.

    For mine, it was that the .csproj file contained references to two different versions of 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>
    

    I removed the old reference, and it solved the problem.

    You also get this error if you use package.config together with this build command

    MSBuild.exe /t:Restore MySln.sln
    

    In this case either switch to nuget restore command or use PackageReference.

    I couldn't find any solutions to this so I added a copy of the nuget.exe and a powershell script to the root directory of the solution called prebuild.ps1 with the following content.

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

    I called this powershell script in my build in the Pre-Build script path enter image description here

    You can also use the suggested error message as a hint. Here's how, find the Manage Packages for Solution, and click on the resolve missing nuget package.

    That's it

    <!--<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" />
    

    Rebuild if all ok, no need to proceed, else Right-click the project, click 'unload project' Right-click the project again and edit .csproj file

    Validate the path of Codedom, it was not having net45 in previous paths, add that manually, save, load, rebuild. It should work.

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

    As many suggested removing the <Target> tag may make it compile-able. Yet, beware of the fact that it has a side effect when you do it for test projects.

    I got error related to MSTest.TestAdapter nuget package while compiling. Resolved that issue by removing <Target> tag. Though it made build successful, test methods became non discover-able. Test explorer won't list down the test methods in that project and Run Test or Debug Test won't work as well.

    I encountered this while using Visual Studio 2017 and .Net framework 4.7, it can very well happen in other versions

    I've exactly that problem using VS2017, .Net4.7 and a unit testing project. That project is added to multiple solutions. The automatic restore works but to the wrong place. Replace with $(SolutionDir) work but update failes. I asked that here. Do you have any solution found? – Sebastian Schumann Oct 17, 2017 at 9:11

    The issue for me was that NuGet couldn't automatically get/update the packages because the full file path would be too large. Fixed by moving my solution to a folder in my Documents instead of a deeply nested folder.

    Then can right-click on solution and select "Restore NuGet Packages" (which probably isn't necessary if you just build it and let it do it for you), and then select "Manage NuGet Packages for Solution" to get all the packages updated to the latest version.

    This was for a solution of a sample ASP MVC application downloaded from Microsoft's web site.