我有一个类库,我要作为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
读到你的问题时,我想到了两个想法:
- 坚持
nuget pack
而不是dotnet pack
→正如您已经提到的,使用dotnet pack
构建新NuGet包的想法是拥有多个包而不是具有多个程序集的单个包。
也许你可以在.nuspec
中使用<files>
元素:因为你已经构建了其他项目,你可以添加对dll
s的引用。 - 根据微软文档,你可以试试这个:
<ItemGroup>
<ProjectReference Include="......vendorHypermediaSrcHypermedia.JsonApi.ClientHypermedia.JsonApi.Client.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
<ProjectReference Include="......vendorHypermediaSrcHypermediaHypermedia.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
</ItemGroup>
免责声明:我没有测试任何一个