繁体   English   中英

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

[英]Custom .NET Standard Nuget package not installing correctly

我有一个带有许多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”还原,构建和打包选项。

程序包存储在C:\\ Users \\ antho.nuget \\ packages中的Nuget缓存中。 当我使用对象浏览器检查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步

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

第2步

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

dotnet nuget locals all --clear

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM