【问题标题】:Referencing .NET 4.6.2 class library from .NET Core app从 .NET Core 应用程序引用 .NET 4.6.2 类库
【发布时间】:2016-08-10 12:33:12
【问题描述】:

我正在使用 VS 更新 3 (14.0.25425.01)。这是我所做的:

  1. 创建 ASP.Net Core Web 应用程序 (.Net Core)
  2. 创建类库 .Net 4.6.2
  3. net462 添加到框架中,netcoreapp1.0,在 project.json 中导入
  4. 右键单击 ASP.Net Core 应用程序,单击添加引用,选择项目,选择您在步骤 2 中创建的类库。

我在恢复时没有收到任何错误,并且引用已添加到 ASP.Net Core 应用程序中。但是,我无法访问它。我无法添加 using 导入声明或访问对象。我经历了很多事情,但似乎没有任何效果,而且帖子的版本非常分散。

这是 ASP.Net Core 应用程序中的 Program.cs。

更新 我按照内特的建议做了。我以为我已经尝试过了……但果然我现在可以访问我的 4.6.2 库了。但是,我现在遇到了编译错误。

【问题讨论】:

    标签: c# visual-studio-2015 .net-core project.json


    【解决方案1】:

    这在 Visual Studio 2015 Update 3 中确实有效,但您的 project.json 不太正确。

    不应将net462 添加到imports 部分,而应将其添加到frameworks 部分中:

    "frameworks": {
      "net461": { },
      "netcoreapp1.0": {
        "dependencies": {
          "Microsoft.NETCore.App": {
            "type": "platform",
            "version": "1.0.0"
          }
        }
      }
    }
    

    请注意,Microsoft.NETCore.App 依赖项也需要移至 netcoreapp1.0 部分。这是因为只有在编译为 .NET Core 应用程序时才需要这种依赖关系。

    对您的 .NET 4.6.2 库的引用只是您的 dependencies 部分的一部分:

    "dependencies": {
      (...)
      "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
      "MyLibrary": {
        "target": "project"
      }
    }
    

    通过以这种方式构建它,我能够毫无问题地引用和使用 .NET 4.6.2 库中的类。


    作为参考,这是我使用的整个工作 project.json

    {
      "dependencies": {
        "Microsoft.AspNetCore.Mvc": "1.0.0",
        "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
        "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
        "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
        "Microsoft.Extensions.Configuration.Json": "1.0.0",
        "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
        "Microsoft.Extensions.Logging": "1.0.0",
        "Microsoft.Extensions.Logging.Console": "1.0.0",
        "Microsoft.Extensions.Logging.Debug": "1.0.0",
        "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
        "MyLibrary": {
          "target": "project"
        }
      },
      "frameworks": {
        "net461": { },
        "netcoreapp1.0": {
          "dependencies": {
            "Microsoft.NETCore.App": {
              "type": "platform",
              "version": "1.0.0"
            }
          }
        }
      },
      "version": "1.0.0-*"
    }
    

    【讨论】:

    • 实际上是为netcoreapp1.0 编译还是只为net461 编译?
    • @svick 同时使用 Visual Studio 和 dotnet build,为 net461netcoreapp1.0 生成二进制文件。
    • 怎么样? netcoreapp1.0 应用程序不应该依赖于 net461 库,这是不兼容的。
    • @svick...我在这里做错了吗?你有什么建议吗?
    • @NateBarbettini 查看我的更新问题。我知道这看起来很明显,但这有什么影响?项目构建成功并运行
    【解决方案2】:

    @NateBarbettini 回答完成了我最初的问题。但是我无法使用我的 .Net 4.6.1 项目运行 ASP.Net Core Web 应用程序版本 1,因为它无法为我的 .Net 4.6.1 项目找到 .NetCore.App v1 程序集。因此,我使用以下 project.json 在我的 .Net 4.6.1 项目中添加了一个 project.json。

    {
      "version": "1.0.0-*",
    
      "dependencies": {
      "NETStandard.Library": "1.6.0"
      },
    
      "frameworks": {
      "netstandard1.6": {
        "imports": "dnxcore50"
       },
      "net461": {}
     }
    }
    

    接下来,在 ASP.Net Core Web 应用程序中修改 project.json,在 .NetCore.App 下添加一个依赖项。这样,它将同时选择 4.6.1 和 .NetCore v1 两个版本。

    ...
    "frameworks": {
    "net461": {
      "dependencies": {
        "ClassLibrary1": {
          "target": "project"
        }
      }
    },
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8",
        "net461"
      ],
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.0",
          "type": "platform"
        },
        "ClassLibrary1": {
          "target": "project"
        }
      }
    }
    }
    

    到目前为止一切顺利,我可以在 .Net 4.6.1 中进行开发,并且可以在 .NetCore.App v1 下运行。但是,我认为当我的 .Net 4.6.1 项目中有其他依赖项时会出现问题。

    【讨论】:

    • 还有哪些其他依赖项会导致您的 .NET 4.6.1 项目出现问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2019-12-29
    • 2016-10-17
    相关资源
    最近更新 更多