运行 Nuget restore 时出现 NU1202 错误 [英] Getting NU1202 error when running Nuget restore

查看:32
本文介绍了运行 Nuget restore 时出现 NU1202 错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I have a .NET Framework solution that I'm trying to set up with a pipeline on Azure DevOps. I'm getting an error when trying to restore packages though:

NU1202: Package AppCenter.Analytics.Metrics 1.1.0 is not compatible with net40 (.NETFramework,Version=v4.0). Package AppCenter.Analytics.Metrics 1.1.0 supports: netstandard1.0 (.NETStandard,Version=v1.0)

And many more like this. It's right - that package isn't compatible with net40, but it shouldn't matter. There are several projects in the solution, but the oldest .NET version is 4.5, so I can't figure out where the v4.0 is coming from in the above. Other things that may be relevant:

  1. The build output reports a NuGet version of 5.3.1.6268 and MSBuild version of 16.3.2.50909.
  2. The solution restores and builds correctly locally.
  3. I noticed a "v4.0" in the .sln.metaproj file: <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>. That seems relevant, but I can't figure out where it's coming from or how to change it. Azure devops doesn't see this file as it's ignored by git, but I wonder what's causing that 4.0 there.

Here's a snippet from the pipeline.yaml:

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release 2019'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '$(solution)'
    feedsToUse: 'select'
    vstsFeed: '#####'

And here's one of the offending csproj files. There's some funny business for targeting multiple versions of Revit, and finding the location of Rhino dlls, but I can't see anything that would lead to trying to install packages for .NET v4.0:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Rhino7DefaultInstallDir>$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINESOFTWAREMcNeelRhinoceros7.0Install', 'Path', null, RegistryView.Registry64))</Rhino7DefaultInstallDir>
    <Rhino7DebugInstallDir>$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USERSoftwareMcNeelRhinoceros7.0-WIP-Developer-Debug-trunkInstall', 'Path', null, RegistryView.Registry64))</Rhino7DebugInstallDir>
    <Rhino7InstallDir>$([MSBuild]::ValueOrDefault('$(Rhino7DebugInstallDir)', '$(Rhino7DefaultInstallDir)'))</Rhino7InstallDir>
    <Rhino7DefaultPluginsDir>$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINESOFTWAREMcNeelRhinoceros7.0Install', 'Default Plug-ins Folder', null, RegistryView.Registry64))</Rhino7DefaultPluginsDir>
    <Rhino7DebugPluginsDir>$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USERSoftwareMcNeelRhinoceros7.0-WIP-Developer-Debug-trunkInstall', 'Default Plug-ins Folder', null, RegistryView.Registry64))</Rhino7DebugPluginsDir>
    <Rhino7PluginsDir>$([MSBuild]::ValueOrDefault('$(Rhino7DebugPluginsDir)', '$(Rhino7DefaultPluginsDir)'))</Rhino7PluginsDir>
  </PropertyGroup>
  <Import Project="....packagesCostura.Fody.3.3.3uildCostura.Fody.props" Condition="Exists('....packagesCostura.Fody.3.3.3uildCostura.Fody.props')" />
  <PropertyGroup Condition="$(Configuration.Contains('2018'))">
    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
    <RevitVersion>2018</RevitVersion>
  </PropertyGroup>
  <PropertyGroup Condition="$(Configuration.Contains('2019'))">
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <RevitVersion>2019</RevitVersion>
  </PropertyGroup>
  <PropertyGroup Condition="$(Configuration.Contains('2020'))">
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <RevitVersion>2020</RevitVersion>
  </PropertyGroup>
  <PropertyGroup>
    <!-- Common ruleset shared by all projects -->
    <CodeAnalysisRuleset>$(SolutionDir)solution.ruleset</CodeAnalysisRuleset>
  </PropertyGroup>
  <ItemGroup>
    <AdditionalFiles Include="$(SolutionDir)stylecop.json" />
  </ItemGroup>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{D6C256D4-B518-464F-9E68-CB282202E846}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Namespace</RootNamespace>
    <AssemblyName>AssemblyName</AssemblyName>
    <TargetFrameworkProfile />
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug 2018|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binDebug 2018</OutputPath>
    <DefineConstants>TRACE;DEBUG;REVIT_2018</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release 2018|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binRelease 2018</OutputPath>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DefineConstants>REVIT_2018</DefineConstants>
    <Optimize>true</Optimize>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug 2019|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binDebug 2019</OutputPath>
    <DefineConstants>TRACE;DEBUG;REVIT_2018; REVIT_2019</DefineConstants>
    <DebugType>portable</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release 2019|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binRelease 2019</OutputPath>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DefineConstants>REVIT_2018; REVIT_2019</DefineConstants>
    <Optimize>true</Optimize>
    <LangVersion>7.3</LangVersion>
    <DebugType>portable</DebugType>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug 2020|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binDebug 2020</OutputPath>
    <DefineConstants>TRACE;DEBUG;REVIT_2018; REVIT_2019; REVIT_2020</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release 2020|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>binRelease 2020</OutputPath>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DefineConstants>REVIT_2018; REVIT_2019; REVIT_2020</DefineConstants>
    <Optimize>true</Optimize>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Microsoft.VisualBasic" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:Program Files (x86)Reference AssembliesMicrosoftWindowsPowerShell3.0System.Management.Automation.dll</HintPath>
    </Reference>
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <ItemGroup>
    ... Files ...
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="PropertiesResources.resx">
      <SubType>Designer</SubType>
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>
 ... More Files in ItemGroups ...
  <ItemGroup>
    ... Project References ...
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="AppCenter.Analytics.Metrics">
      <Version>1.1.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Analytics">
      <Version>2.6.2</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Crashes">
      <Version>2.6.2</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
      <Version>2.9.8</Version>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="StyleCop.Analyzers">
      <Version>1.1.118</Version>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>
  <Choose>
    <When Condition="$(Configuration.Contains('Debug'))">
      <ItemGroup>
        <Reference Include="Eto">
          <HintPath>$(Rhino7InstallDir)Eto.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="RhinoCommon">
          <HintPath>$(Rhino7InstallDir)RhinoCommon.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="Rhino.UI">
          <HintPath>$(Rhino7InstallDir)Rhino.UI.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="GH_IO">
          <HintPath>$(Rhino7PluginsDir)GrasshopperGH_IO.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="Grasshopper">
          <HintPath>$(Rhino7PluginsDir)GrasshopperGrasshopper.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="RevitAPI">
          <HintPath>C:Program FilesAutodeskRevit $(RevitVersion)RevitAPI.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="RevitAPIUI">
          <HintPath>C:Program FilesAutodeskRevit $(RevitVersion)RevitAPIUI.dll</HintPath>
          <Private>False</Private>
        </Reference>
        <Reference Include="AdWindows">
          <HintPath>C:Program FilesAutodeskRevit $(RevitVersion)AdWindows.dll</HintPath>
          <Private>False</Private>
        </Reference>
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <PackageReference Include="RhinoCommon" Version="7.0.19274.12465-wip" IncludeAssets="compile; build" />
        <PackageReference Include="Grasshopper" Version="7.0.19274.12465-wip" IncludeAssets="compile; build" />
        <PackageReference Include="Revit_All_Main_Versions_API_x64" Version="$(RevitVersion).0.*" IncludeAssets="build; compile" />
      </ItemGroup>
    </Otherwise>
  </Choose>
  <Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />
  <PropertyGroup>
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  </PropertyGroup>
</Project>

I haven't been able to figure out what to check for or how to debug this. Thanks!

解决方案

I noticed a "v4.0" in the .sln.metaproj file. I haven't been able to figure out what to check for or how to debug this.

Some tips that may help for trouble-shooting and resolving the issue:

#1. I think the .sln.metaproj in solution folder and .csproj.metaproj in project folder should be excluded from Source Control. At least these files is not recommended to publish to Azure Devops Repos.

Check their content we can find something like <ProjectConfiguration Project="{xxx}" AbsolutePath="C:Usersxxxsource epos...>, it's an absolute path in local machine. When using Hosted agent in Build Pipeline, these paths are invalid.

#2. Also, I checked the log of Nuget Restore task, and confirm the content of xx.xx.metaproj files won't affect the nuget restore process. So I think your issue didn't result from this.

#3 The NU1202 indicates the package is not compatible with current project. Check the log of Nuget Restore task you'll see something like this:

The error message will tell us which project causes the issue. Open the xx.csproj file in Devops Repos to check its content. I assume the version of the project targets v4.0 or one of its targetFrameworks(multi-targeting) is v4.0. And if that project is a sdk-format project, you may need to use dotnet restore task to restore packages for that.

Update:

See here, nuget restore command won't receive and recognize build configuration. So for this situation, nuget can't access the propertyGroup whose conditions is $(Configuration.Contains('xxx')). Then it is equivalent to nuget restore xx.sln=>nuget restore one project whose TargetFrameworkVersion is empty.And then nuget will consider this project uses default 4.0. So the issue occurs.

Steps to reproduce:

1.Create a simple .net framework 4.7 project, add this into xx.csproj:

    <PackageReference Include="AppCenter.Analytics.Metrics">
      <Version>1.1.0</Version>
    </PackageReference>

2.Comment the <!--<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>-->

3.Save all and nuget restore xx.sln, same issue occurs:

Possible Workaround:

nuget restore won't accept something like nuget restore xx.sln -property:Configuration=xxx like nuget pack command. So this issue will always occur unless we define the valid TargetFramework version in propertyGroup no matter which conditions. (I guess this is not what you want, but this issue cannot be avoided for this situation)

So I think a better choice is to use msbuild /t:restore instead of nuget restore. For VS2017 and above, msbuild has contained the restore option itself. And it works for those .net fx based projects that use PackageReference format.

So you can use VS build task with arguments /t:restore to restore the packages instead of using Nuget restore(this is not suitable for your custom csproj script).

这篇关于运行 Nuget restore 时出现 NU1202 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆