自定义.NET Standard Nuget软件包无法正确安装

时间:2018-08-17 03:00:29

标签: c# nuget .net-standard

我有一个带有许多POCO的.NET Standard类库项目。此项目是使用TeamCity构建的,并使用内置的Nuget服务器以Nuget包的形式发布。

我遇到的问题是,当它与许多.NET Framework类库项目以及ASP.NET MVC和Web API项目(设置为.NET Framework 4.7.1)一起安装到我的解决方案中时,似乎是卡在旧版本上并且无法识别我添加到项目中的任何新类或方法-例如NewMethod1()

Nuget软件包的项目文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net461;net462;net47</TargetFrameworks>
    <Version>1.0.0</Version>
  </PropertyGroup>

  <PropertyGroup>
    <NetStandardImplicitPackageVersion>2.0.0</NetStandardImplicitPackageVersion>
    <Description>Standard entities used within our systems</Description>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
    <FileVersion>1.0.0.0</FileVersion>
    <Authors>Company X</Authors>
    <Company>Company X</Company>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <OutputPath>bin\Release</OutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <OutputPath>bin\Debug</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
  </ItemGroup>

</Project>

TeamCity正在使用“ dotnet”还原,构建和打包选项。

该软件包存储在我的Nuget缓存中,该缓存位于C:\ Users \ antho.nuget \ packages中。当我使用对象浏览器检查dll时,它包含新的类和方法(例如NewMethod1())。

当我将此包安装到.NET Framework解决方案中时,在安装过程中不会发生任何错误。如果我尝试使用新方法NewMethod1()-代码将无法编译。

如果我创建一个全新的解决方案和ASP.NET MVC项目并安装该软件包,则该新方法可以在代码中使用,并且可以成功编译。

是什么原因导致新版本无法正确安装?提供一个重现该问题的示例很棘手,因为它似乎可以在新项目中使用。

更新

如果我将新项目添加到解决方案并安装Nuget软件包,它将获得最新版本。

项目A

<PackageReference Include="AutoGuru.Shared.Utilities" Version="1.0.369" />

public class Class1
{
    public void Test()
    {
        "dfdfdfdf".SanitizeVehicleRego();
    }
}

项目B

<PackageReference Include="AutoGuru.Shared.Utilities">
  <Version>1.0.369</Version>
</PackageReference>

public class Class1
{
    public void Test()
    {
        "fdfdf".SanitizeVehicleRego();
    }
}

项目B编译成功,而项目A编译失败。 SanitizeVehicleRego()是AutoGuru.Shared.Utilities程序包中的字符串扩展方法。

1 个答案:

答案 0 :(得分:0)

我的回答很大,所以我添加了一个答案而不是评论。

第1步

在还原软件包时检查输出,有时dotnet restore自动解析其他版本(您的控制台中应针对此类情况发出警告)。

第2步

如果在步骤1 中找到了任何信息。尝试清理所有本地nuget缓存。

dotnet nuget locals all --clear

我不确定本地nuget包是否处于缓存状态。但是,如果是这样,它将解决您软件包的正确版本。