当前位置: 首页 > 知识库问答 >
问题:

Nuget无法还原Microsoft.Net.Comilers 1.0.0

甄飞飙
2023-03-14

我正在尝试使用Nuget Package Manager在VS 2017中安装/重新存储Microsoft.Net.Comilers.1.0.0。在输出中,它显示恢复已完成。然而,当我检查<code>包</code>文件夹时,我看不到<code>Microsoft.Net。编译器文件夹。因此我犯了错误

严重性代码描述项目文件行禁止显示状态错误此项目引用了此计算机上缺少的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')" />

背景< br >此问题出现在目标框架为4.6.2的Web API项目中。我还有< code>NET Standard 1.4库,我想与不同类型的。NET应用程序。当我将< code>NET Standard Library的引用添加到Web API项目时,我遇到了缺少依赖项的问题。所以根据我编辑的建议。csproj文件并添加

  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

这修复了缺少依赖项的问题。

然后我删除了<code>包。config</code>文件中,从<code>packages</code>文件夹中删除了所有包,并重新添加了所有包(除了我无法添加Microsoft.Net.Comilers)。包引用现在位于.csproj文件中

这里有SO帖子,但是在我的情况下,Microsoft.Net.Compilers甚至没有恢复到文件夹。VS 2017显示恢复已完成,但我不知道它实际上在哪里处理文件。(除非文件夹名称与 Microsoft.Net.Compilers 不同)

我的原始包.config文件有这一行

<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" />

现在在 .csproj 文件中,我有

   <PackageReference Include="Microsoft.Net.Compilers">
      <Version>1.0.0</Version>
    </PackageReference>

UPDATE 1
所以看起来当包引用被启用时,nuget将在C:\用户\{用户名}\. nuget\包文件夹中安装包

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

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

共有3个答案

林项明
2023-03-14

在我的例子中,我从GitHub下载了一个项目,它不包括完整的sln,而只是一个文件夹,其中. csproj和包文件夹位于同一级别。

在这种情况下,我只需替换“..\将“与”打包。中的“包”。csproj文件。我假设GitHub repo的所有者决定只上传项目文件夹,但在上传之前没有重新编译以进行测试...也许吧?

易星宇
2023-03-14

@LP13的回答让我找到了正确的方向。虽然我必须做一些不同的事情。

我的。csproj文件有两个对Microsoft.Net编译器的引用。一个是对2.9.0(我正在使用的当前版本)和1.2.1(旧版本)的引用。

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

> < li>

导入项目=。\包\Microsoft。CodeDom . providers . dotnetcompilerplate . 1 . 0 . 1...

Import Project=“.\packages\Microsoft.Net.Compilers.1.2.1 ...

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

    < li >错误条件= "!存在('。\包\Microsoft。Net编译器... < li >错误条件= "!存在('。\包\Microsoft。' CodeDom . providers . dotnet compiler platform . 1 . 0 . 1 '...
姜乐家
2023-03-14

因为将软件包管理格式设置为PackageReference会将软件包安装到全局编号文件夹中,该文件夹为< code>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')" />

然后更新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>

所有这些只是为了引用NET Standard 1.4项目到。NET 4.6.2。很烦人!!

 类似资料:
  • 我试图使用nopCommerce(它是用。NET核心编写的),但是当我想运行项目时,我会遇到52个错误,告诉我运行一个nuget包还原

  • 问题内容: 当我在Jenkins构建服务器上构建.NET Standard 2.0库时 我在构建日志中遇到了以上错误。 我搜索了错误并找到了解决方案 然而, 在开始构建之前清理工作区时,该解决方案无法解决问题。 因此,我在MSBuild之前插入命令,但失败了 根据解决方案参考,也许升级 Nuget Package Installer 可以帮助我。但是我不知道如何通过命令行升级 Nuget软件包安装

  • 这是一个简单的错误,但令人沮丧?我的项目无法重建/编译。错误是: 所以我尝试 nuget 还原并获得: 那么谁是对的,谁是错的,这是如何解决的呢/

  • 我正在尝试使用本地的nuget软件包进行我的dotnet恢复,我尝试了以下教程:dotnet恢复w/out internet 我的问题: 我使用的服务器在公司网络上,这就是为什么我不能使用dotnet restore,所以我也遇到了nuget.org类似于此链接的问题。 null 虽然@Omajid的回答很有帮助,但我相信docker卷装载只有在使用docker run时才可能,而不能在Docke

  • “还原”功能会先删除数据库已选择的对象,然后根据你的备份创建新的对象。最后,插入数据。 还原一个备份到现有的数据库或模式 在主窗口中,打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击“还原备份”。 选择还原选项并点击“还原”。 还原一个备份到新的数据库或模式 创建并打开一个新的数据库或模式。 点击“备份”。 右击对象选项卡的任意位置并选择“还原备份从”。 浏览备份文