我有一个类库,我是作为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的一个子模块中,并包含在一个项目引用中。
因此,我怀疑nuget构建并没有从引用的项目中获取代码。
<ItemGroup>
<ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia.JsonApi.Client\Hypermedia.JsonApi.Client.csproj" />
<ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia\Hypermedia.csproj" />
</ItemGroup>如果是这样的话,我想我也可以在nuget上发布这个子模块,然后在SDK中引用这个子模块来解决这个问题。但是,我的子模块是其他人包的一个分支,带有一些补丁(包括添加此方法),所以我不想这样做,特别是因为我有带上游的PRs。
有没有办法强迫nuget构建获取所有的项目引用并包含它们?这也完全可能是我在这里乱叫错树了。
注意:我见过这个答案,但上面提到的旗帜在dotnet pack中似乎不存在
发布于 2022-06-09 08:28:38
当我读到你的问题时,我想到了两个想法:
nuget pack而不是dotnet pack→,正如您已经提到的,使用dotnet pack构建较新的NuGet包的想法是拥有多个包,而不是一个包含多个程序集的包。
也许您可以使用.nuspec:因为您已经在构建其他项目,所以可以添加对dll的引用。<ItemGroup>
<ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia.JsonApi.Client\Hypermedia.JsonApi.Client.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
<ProjectReference Include="..\..\..\vendor\Hypermedia\Src\Hypermedia\Hypermedia.csproj">
<IncludeAssets>all</IncludeAssets>
</ProjectReference>
</ItemGroup>免责声明:我没有测试任何一个。
https://stackoverflow.com/questions/72554227
复制相似问题