.net - 如何通过 VS2017 强制 .NET Framework 在 NuGet 包中使用 .NET Standard 库

标签 .net visual-studio-2017 ravendb .net-standard

我有一个业务逻辑和 DAL 项目,将此项目称为 A。该库以 .NET Standard 2.0 作为目标框架。我正在引用 NuGet 包 RavenDB.Client 3.5.4,它使用 NuGet 包的 netstandard1.3 文件夹中的 library/dll。

我有一个目标框架为 .NET Framework 4.7.1 的 ASP.NET Web API 应用程序,调用此项目 B(不使用 .Net Core 2,因为有一些对旧代码的引用不适用于 .Net Core) .

我也有一个 ASP.NET Core 应用程序,用 .NET Core 2.0 的目标框架调用这个项目 C。

项目 B 和 C 都引用项目 A。

项目 C 可以毫无问题地引用项目 A 和 RaveDB.Client NuGet 包,因为它也使用 netstandard1.3 文件夹中的 library/dll。从 C 调用包 A 中的 BL 或 DAL 时没有问题。

项目 B 可以引用项目 A,但引用 RavenDB.Client NuGet Package 引用的是 net45 文件夹中的 package/dll。我收到此错误:

The type 'IDocumentStore' is defined in an assembly that is not referenced.You must add a reference to assembly 'Raven.Client.Lightweight, Version=3.5.4.0, Culture=neutral, PublicKeyToken=null

起初这会产生误导,因为显然问题出在 Target Framework 上。我引用了 Raven.Client.Raven.Client.Lightweight 版本 3.5.4.0。但我将从 net45 库构建的对象 (IDcoumentStore) 传递给 netstandard1.3 库。

我的问题,因为 .NET Framework 4.7.1 可以使用 .NET Standard 库,我如何强制 VS2017 中针对 .NET Framework 4.7.1 的项目在 NuGet 包中使用 .NET Standard 库?我尝试将 targetFramework="net471"更改为 targetFramework="netstandard1.3"这不起作用似乎 VS 或 NuGet 恢复了。

我唯一的解决方案是从 Nuget 包中删除 net45 库,并仅使用 .Netstandard 库推出我自己的解决方案,这在许多层面上都很痛苦。

最佳答案

在 Raven 4.0 客户端中,NuGet 包似乎只包含 .netstandard 库。这将解决问题,并且基本上通过重新创建 Raven 3.x 客户端并剥离 net45 文件夹并重新打包来完成我所做的工作。现在我需要做的就是更新到 4.0,这不是一件容易的事。

这回答了 RavenDB 的问题,只是希望我不会遇到混合了完整框架和 .Netstandard 库的其他包,并且我希望我的应用程序针对特定框架而不是为我挑选它。

更新

我认为问题/解决方案存在混淆。我会再试一次。
如果您查看 RavenDB.Client 3.5.5 包,您将看到以下内容。任何具有类似结构的包都会有类似的问题。
\lib \net45 \netstandard1.3
我有一个面向 .NET Standard 2.0 的类库,它将使用\lib\netstandard1.3 文件夹中的 .NET Standard 1.3 RavenDB 库。我还有一个针对 .NET Framework 4.7.1 的 App 项目。该项目引用了类库和 RavenDB 客户端库。该项目将使用\net45 文件夹中的 .NET 4.5 库。问题是,当应用程序从类库运行 RavenDB 逻辑时,我收到错误,因为 bin 文件夹中的 RavenDB 库面向 .NET 4.5 库,而不是我的类库正在寻找的 .NET Standard 1.3 库。

当我引用 NuGet 包时,我无法指定目标框架。目标框架是根据项目的目标框架推断出来的。即使以 .NET Framework 4.7.1 为目标的项目可以使用 .NET Standard Library 或 .NET Framework 库,但我无法选择它为我选择的目标框架。

因为我无法选择目标框架,唯一的方法是通过从 NuGet 包中删除\net45 文件夹并重新打包它来强制它。然后 .NET Framework 4.7.1 应用程序将使用 .NET Standard 1.3 RavenDB 库。
或者使用 RaveDB 4.0,这更像是一项任务,因为我必须升级服务器并重写一些代码。

如果您查看 RaveDB 4.0 包,它只有 .NET 标准库。因此,为什么它可以在引用 .NET 2.0 标准类库的目标 4.7.1 的项目中工作。
\lib \netstandard1.3 \netstadnard2.0

关于.net - 如何通过 VS2017 强制 .NET Framework 在 NuGet 包中使用 .NET Standard 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471454/

相关文章:

c# - 每次使用 Prism 请求模块时,我都需要运行一个函数

.net - 如何使用基于HttpClient和.net4的Rest-client进行身份验证

azure - Visual Studio 2017 发布到 Azure 失败,引用为空 ("object reference not set to an instance of an object")

asp.net-core - 如何处理多层一对多关系的DAL?

ravendb - WebAPI 和 OData - 返回带前提条件的 Queryable

c# - 在 RavenDB 中指定集合名称

c# - 从 List<MyType> 到 IEnumerable<MyType> 返回到 List<MyType> 的转换无效,为什么?

c# - .ToUniversalTime(),为什么会这样?

visual-studio - 如何使用回车键更改标签以自动完成?

c++ - 大小基于用户输入的井字棋盘