Nuget无法恢复Microsoft.Net.Compilers.1.0.0

LP1*_*P13 10 nuget nuget-package nuget-package-restore visual-studio-2017 .net-standard

我正在尝试Microsoft.Net.Compilers.1.0.0使用Nuget Package Manager在VS 2017中安装/重新启动.在输出中,它显示恢复已完成.但是,当我检查packages文件夹时,我没有看到Microsoft.Net.Compilers文件夹.并且因为我得到了错误

严重级代码说明项目文件行抑制状态错误此项目引用此计算机上缺少的NuGet程序包.使用NuGet Package Restore下载它们.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105.丢失的文件是....\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props.XXXXX\Src\Api\Api.csproj 296

在csproj文件中,顶部有一行

<Import Project="..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
Run Code Online (Sandbox Code Playgroud)

背景
此问题发生在具有目标框架4.6.2的Web API项目中.我也有NET Standard 1.4我想与不同类型的.NET应用程序共享的库.当我添加NET Standard LibraryWeb API项目的引用时,我错过了依赖项问题.所以根据我的建议我编辑.csproj文件并添加

  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
Run Code Online (Sandbox Code Playgroud)

这解决了缺少的依赖问题.

然后我删除package.config文件,从packages文件夹中删除所有包并添加回所有包(除了我无法添加Microsoft.Net.Compilers).包引用现在位于.csproj文件中

SO张贴在这里,但在我的情况下Microsoft.Net.Compilers甚至不得到恢复到packages文件夹中.VS 2017显示恢复完成但我不知道它实际上在哪里处理文件.(除非文件夹名称与Microsoft.Net.Compilers不同)

我原来的package.config文件有这一行

<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" />
Run Code Online (Sandbox Code Playgroud)

现在我的.csproj文件

   <PackageReference Include="Microsoft.Net.Compilers">
      <Version>1.0.0</Version>
    </PackageReference>
Run Code Online (Sandbox Code Playgroud)

更新1
因此,当启用packagereference时,nuget将在C:\Users\{username}\.nuget\packages文件夹中 安装软件包

这意味着我需要使用正确的相对路径更新csproj文件.

这个包文件夹的相对路径是什么?

LP1*_*P13 10

由于将包管理格式设置为PackageReference,将包安装到global nuger文件夹,即C:\Users\{username}\.nuget\packages我必须编辑csproj文件,更新以下行

csproj的顶部

<Import Project="$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" />
Run Code Online (Sandbox Code Playgroud)

然后更新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('$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

所有这些只是将NET Standard 1.4项目引入.NET 4.6.2.很烦人!!


Jef*_*hal 5

@LP13的回答让我指出了正确的方向。尽管我必须做一些不同的事情。

我的 .csproj 文件有 2 个对 Microsoft.Net.Compliers 的引用。一个用于 2.9.0(我当前使用的版本)和 1.2.1(旧版本)。

在文件顶部,我注释掉了引用的 2 个导入项目行:

  • 导入项目=“.\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1 ...

  • 导入项目=“.\packages\Microsoft.Net.Compilers.1.2.1 ...

在文件底部,在错误条件条目中为相同的引用执行相同的操作:

  • 错误条件="!Exists('.\packages\Microsoft.Net.Compilers.1.2.1...
  • 错误条件="!Exists('.\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1' ...