.net 核心 class 库调用 .net 框架 class 库

.net core classlibrary calling .net framework class library

找不到我的疑问的答案,希望有人能澄清。

我用

创建了一个虚拟解决方案

试图引用任何一种方式,但我不能,它们不兼容,很好理解。

现在我的问题

我有一个实用程序 class 库(.net 框架),带有扩展、助手等... 现在由 winforms-wpf-asp.net mvc 4,5 应用程序使用.net core 事件在我看来我不能再使用这个库,除非我将它移植到 .net core,然后我不能与我的其他应用程序一起使用。

正确的做法是什么?

我错过了显而易见的东西吗?

您可以尝试使用共享库项目。可以这么说,它针对引用 application/library 的平台进行编译。这使您能够创建针对不同平台的 class 库,而无需复制任何代码,但它可能需要一些 #if...

https://blogs.msdn.microsoft.com/dotnet/2014/04/21/sharing-code-across-platforms/

我无法通过简单地使用共享项目在普通 .NET 库和核心项目之间共享代码,因为我无法从核心项目中引用它。

不过,我可以通过一些小技巧让它发挥作用。

让我用这个folder/file结构来解释一下:

[ProjectName] // Root of Core project
    project.json
    [ProjectName].xproj

    Shared // Root of Shared project
        [ProjectName].Shared.projitems
        [ProjectName].Shared.shproj 
        // -- Source files here --

    Net // Root of .NET project
        [ProjectName].csproj
        Properties
            AssemblyInfo.cs // For both Core and .NET project
        // NO source files here

因此,您当然需要 3 个项目:核心项目、普通 .NET 项目和共享项目。
共享项目包含所有源文件。
.NET 项目引用共享项目,因此它也有这些文件。
Core 项目看到 Shared 项目的所有文件,所以它也有相同的文件。

就是这样。您现在可以拥有 .NET 和 Core 项目的通用源代码文件。

一些注意事项:

  • 永远不要将 .shroj.csproj 放在同一个文件夹中。对我来说,它完全关闭了 VS (2015) 中的智能感知。这个信息让我付出了很多痛苦...
  • 可以使用#if-s微调常用代码
  • 您也可以在具有上述文件夹结构的 .NET 项目中使用 NuGet 2。
    • 请注意,如果您将 (NuGet 2) packages.config 放入 (NuGet 3) project.json 所在的同一文件夹中,后者将完全覆盖较早的。