【问题标题】:Possibility to reference "traditional" (old) .net libraries from .net core applications可以从 .net 核心应用程序中引用“传统”(旧).net 库
【发布时间】:2017-02-11 08:29:54
【问题描述】:

关于从 .net 核心应用程序(例如 ASP.Net Core)到常用 .net 框架库的向后引用可能性的信息有些混乱。我现在得到以下印象:

  1. 如果您使用的是“netcoreapp1.0”,则根本无法引用普通库。
  2. 如果您正在使用例如“net451”,那么你可以引用它,但你必须先将它包装在带有相应标签的nuget包中。

这听起来正确吗?

附:我在想,如果情况 1 反编译为 IL 并重新编译为“netcoreapp1.0”或“netstandard1.6”或其他一些巫毒教法会有所帮助吗?

附言正如在 cmets 中提到的,可以引用可以反过来引用库的普通类库项目,但这意味着您必须包装库中的所有内容,因此很大程度上取决于是否可以使用。

【问题讨论】:

  • 还没有,但有可能在.NET Standard 2 中进行一些外部引用(在该页面搜索shim
  • 在第二个选项中,您也可以引用旧格式的项目。

标签: .net asp.net-core .net-core .net-framework-version


【解决方案1】:

目前这是不可能的。

您有 3 个选项:

  1. 尝试将您的旧项目转换为可移植类库 (PCL),然后您的 .net 核心应用可以引用它。
  2. 将您的项目包装到一个 nuget 包中(您已经提到过)
  3. 将项目添加为类库(在 cmets 中提到),但根据 that SO answerthat GitHub thread 似乎并不容易使其工作。

2017 年 3 月 20 日编辑: 刚刚遇到this post:现在似乎可以通过更改 .csproj,让您的 .NET Core 应用程序以 .NET 4.6 为目标,未测试(尚未)

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

然后是dotnet restore,然后是dotnet run

【讨论】:

  • 我可以将任何普通的dll转换为可以从asp.net核心应用程序引用的nuget包吗?它也适用于“netcoreapp1.0”还是仅适用于“netXXX”?
  • 根据这篇文章blogs.msdn.microsoft.com/cesardelatorre/2016/06/28/… 如果要使用传统的 .NET 库,则需要使用在传统 .NET Framework (CLR) 之上运行的 ASP.NET Core。如果您的 ASP.NET Core 应用程序在 CoreCLR 上运行,则不能。对于您提到的“棕地”场景,推荐的方法是我提到的第一种方法,因此使用在传统 CLR(.NET Framework CLR)之上运行的 ASP.NET Core。
  • 另一个问题是我必须将包上传到nuget,还是可以在本地使用而不公开? (否则私有代码的这种可能性没有意义)
  • 你可以在本地使用它,请看这个帖子github.com/aspnet/Home/issues/1672 MV10 提到了如何做到这一点,虽然很痛苦,但它显然有效。 “我必须将我的文件放入本地 NuGet 包中,将该文件夹设置为 NuGet 源,浏览到该包并以这种方式加载它。”
  • 非常感谢您的帮助,如果有人对如何使其工作有其他想法,我会等待其他答案,否则我会接受您的答案。可惜目前还没有很好的向后兼容性。
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多