Nuget Package not Packing Project Ref



我有一个类库,我要作为nuget包发布。

然而,当我试图在演示应用程序中使用这个包时,当我试图使用它时,我得到了这个错误。

System.MissingMethodException: Method not found: 'Hypermedia.Configuration.FieldBuilder`1<!0> Hypermedia.Configuration.DelegatingContractBuilder`2.RenameFieldUsingJsonPropertyName(System.String)'.
at DISCOSweb_Sdk.Mapping.JsonApi.DiscosObjects.DiscosObjectContractBuilder.WithDiscosObject(IBuilder builder)
at DISCOSweb_Sdk.Mapping.JsonApi.DiscosObjectResolver.CreateResolver()
at DISCOSweb_Sdk.Clients.DiscosClient.GetMultiple[T](String queryString)
at DISCOSweb_demo_app.Pages.SimpleFetching.GetMultiple.UpdateModel(Type t) in /home/james/repos/DISOSweb-sdk/src/demo-app/Pages/SimpleFetching/GetMultiple.cs:line 35

因此,RenameFieldUsingJsonPropertyName()方法实际上位于SDK repo的一个子模块中,并且包含在项目参考中。

所以,我怀疑的是nuget构建没有从引用的项目中抓取代码。


<ItemGroup>
<ProjectReference Include="......vendorHypermediaSrcHypermedia.JsonApi.ClientHypermedia.JsonApi.Client.csproj" />
<ProjectReference Include="......vendorHypermediaSrcHypermediaHypermedia.csproj" />
</ItemGroup>

如果是这种情况,我想我也可以在nuget上发布该子模块,然后在SDK中引用它来解决问题。然而,我的子模块是一个带有一些补丁的别人的包的分支(包括添加这个方法),所以我真的不想这样做,特别是因为我有上游的pr。

是否有办法强制nuget构建抓取所有的项目引用并包括它们?也完全有可能我搞错了对象。


注:我已经看到了这个答案,但提到的标志似乎不存在于dotnet pack

读到你的问题时,我想到了两个想法:

  1. 坚持nuget pack而不是dotnet pack→正如您已经提到的,使用dotnet pack构建新NuGet包的想法是拥有多个包而不是具有多个程序集的单个包。
    也许你可以在.nuspec中使用<files>元素:因为你已经构建了其他项目,你可以添加对dlls的引用。
  2. 根据微软文档,你可以试试这个:
<ItemGroup>
<ProjectReference Include="......vendorHypermediaSrcHypermedia.JsonApi.ClientHypermedia.JsonApi.Client.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
<ProjectReference Include="......vendorHypermediaSrcHypermediaHypermedia.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
</ItemGroup>

免责声明:我没有测试任何一个

相关内容

  • 没有找到相关文章

最新更新