【问题标题】:Code reuse of .NET 4.0 DLL (that uses Nuget packages) with .NET CORE.NET 4.0 DLL(使用 Nuget 包)与 .NET CORE 的代码重用
【发布时间】:2017-10-17 00:33:43
【问题描述】:

我花了几天时间在 .NET 4.0 中编写了一个 .DLL 函数的类库。

现在我想使用 .NET Core 从 AWS Lambda 函数调用它。 显然,我们不能从 CORE 引用到 .NET Framework;得到这个错误:

在我的类库中,我使用了所有能用的 Nuget 包来节省时间并使我的代码更小。所以即使我将我的类库转换为 CORE,我现在也必须重写每个 Nuget 包?

看来我们这里真的没有代码重用。我是否在这里错过了一些捷径,或者这将是一个很大的痛苦?如果每个 Nuget 都是开源的,那么我将不得不获取代码,然后构建它的 .CORE 版本?

我阅读了这个 Q/A,但还没有真正给出任何解决方案:Converting a .Net dll to a .Net Core dll

【问题讨论】:

    标签: .net visual-studio-2015 asp.net-core aws-lambda


    【解决方案1】:

    大多数 nuget 包都符合 netstandard (1.x/2.x),因此如果您将项目转换为 .NET Standard 库,则很有可能在项目中使用它们。例如,Autofac 与 .NET Framework 4.5 以及 .NET Standard 1.1(.NET Standard Library >= 1.6)兼容。

    从屏幕截图中我们可以看到您的项目不符合 .NET 标准。不同之处在于您为项目使用了 .NET Framework 模板,例如:

    虽然您应该使用 .NET Standard 模板:

    如果您的项目没有使用某些 Windows 原生功能,您很有可能只需将其转换为 .NET Standard 项目,而无需进行任何更改。

    以下是创建符合 .NET Standard 的新项目的方法: 此外,从屏幕截图中我可以看到您的目标是 .NET Core 1.0,因此您必须确保您的项目目标是正确的 .NET Standard 版本(我知道现在这可能会造成混淆)。 Here 是 .NET Framework / .NET Core 与 .NET Standard 的兼容性列表。 对于 .NET Core 1.0,您的库应面向 .NET Standard 1.6:

    【讨论】:

    • 谢谢,我会阅读“.NET Standard”,我还没有听说过。
    • 您可能还想阅读this 之一。 :)
    • 例如,我使用的是这个包:libraries.io/nuget/Freezer。我创建了一个新的 TestCore 类库,并运行了“Install-Package Freezer -Version 1.0.1.5”。它显示在项目引用中,但表示无法解决。我今天要去看一些 YouTube 视频,看看我可以把所有这些都包起来。
    • 不幸的是,Freezer 不是 .NET Standard 兼容库,这意味着您不能在 .NET Core 项目中使用它。通常,在 nuget 上,您可以看到什么是框架依赖项,例如。 Autofac 与 .NET 4.5 和 Standard 1.1 兼容。我会更新我的答案。
    【解决方案2】:

    我相信你也可以从现有的 DLL 创建一个 nuget 包,然后它可以工作:)

    (如果我没记错的话,虽然不是 100% 肯定)

    【讨论】:

    • 是的,我看到人们讨论创建 nuget 包,但不确定如何解决问题。我的 DLL 使用了至少一个不兼容的 Nuget 包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多