【问题标题】:.NET versions in ASP.CoreASP.Core 中的 .NET 版本
【发布时间】:2016-09-29 09:17:41
【问题描述】:

我有一个带有

的 asp 核心网络应用程序
  "frameworks": {
    "net452": {}
  },

我还有类库 (.NET Core)。

{
  "version": "1.0.0-*",
  "frameworks": {
    "netstandard1.5": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      },
      "net452": {}
    }
  }
}

问题是,如何将 Web 应用项目引用添加到类库?我应该导入一些 .net 框架还是使用 .net 标准?

现在我在尝试添加对类库项目的引用时收到一条错误消息。

不支持以下项目作为参考: “webprojectname”具有与不兼容的目标框架 当前项目“classlibraryprojectname”中的目标

"classlibraryprojectname": .NETCoreApp, Version=v1.0 "webprojectname": .NETFramework,版本=v4.5.2

【问题讨论】:

  • 您是否创建了针对 .net 框架的 aspnet 核心项目?在 Visual Studio 中,您应该使用此模板创建一个新项目:ASP.NET Core Web Application (.NET Core) 而不是 ASP.NET Core Web Application (.NET Framework)
  • 是的,我创建了 ASP.NET Core Web 应用程序 (.NET Framework)。我现在可以更改它,还是应该创建一个新项目?
  • 根据docsNetStandard 1.0 映射到net45。如果您想要net452,请将您的类库增加到1.2 或您的Web 应用程序减少到net45?或者,在类库中添加net45 作为附加框架并允许它交叉编译。 (以前的建议更可取)
  • 值得指出的是,鉴于您列出的“框架”部分,您的“类库”已注册为应用程序。类库框架应该是“netstandard1.#”,而不是netcoreapp1.#。例如,查看 github 上的项目:MS Logging Class Library
  • @Smudge202 我尝试将 net461 导入类库项目,但现在出现另一个错误,例如:“无法解析依赖项 Microsoft.CSshartp”

标签: c# asp.net .net asp.net-core .net-core


【解决方案1】:

编辑:根据问题的更改进行更新。

所以我不再填写 cmets 部分,您的 project.json 应该如下所示:

Web 应用程序(您还会有其他未在此处显示的依赖项)

"dependencies": {
  "YourClassLibrary": "1.0.0-*"
},
"frameworks": {
  "net452": { }
}

类库:

{
  "version": "1.0.0-*",

  "dependencies": {
    "NETStandard.Library": "1.6.0" 
  },

  "frameworks": {
    "netstandard1.2": { }
  }
}

注意:如果您的类库依赖于高于 netstandard1.2 的内容,那么您将不得不增加 Web 应用程序中的 .Net 框架以匹配您正在使用的 NETSTandard(根据之前的 linked docs ),或者你需要像这样交叉编译类库:

{
  "version": "1.0.0-*",

  "frameworks": {
    "netstandard1.5": {
      "dependencies": {
        "NETStandard.Library": "1.6.0" 
      }
    },
    "net452": { }
  }
}

使用第一个建议,您的应用程序为您的类库生成一个程序集,使用第二种方法您的类库将被编译两次(一次用于netstandard1.5,一次用于net452)。当您的 Web 应用程序尝试解析类库时,它意识到它不能使用 netstandard1.5(它以 net462 为目标),因此回退到 net452 程序集。但是请注意,使用第二个选项通常表明您的项目结构不正确,并且只有在您知道自己在做什么以及为什么(在我看来)时才应该使用。

显示的NETStandard.Library 依赖项是 NuGet bundle 必不可少的,它会拉下必要的 CoreFX 包。如果您收到诸如“找不到 Microsoft.CSharp”之类的错误,通常是因为您没有拉下默认软件包。您可以改为只下拉您想要的 CoreFX 包,例如 System.Collections,但这是一种更高级的技术。

希望这有助于解决问题?

【讨论】:

  • 现在“myclasslibraryprojectname”出现错误:“1.0.0-”-> 无法解析依赖项“myclasslibraryproject >= 1.0.0-
  • 如果您已经像我们讨论过的那样进行了很多更改,Visual Studio 有时会有点困惑。关闭并重新打开解决方案。如果这不能解决问题,请删除 project.lock.json 文件并让它们重新生成(先删除类库锁定文件,然后删除 Web 应用程序锁定文件)。虽然 .NET Core 是 RTM,但不幸的是,该工具仍处于预览阶段。
  • @Cieja 我注意到您更新了您的问题,我认为这是我自己的复制粘贴。反过来,我注意到我缺少一个护腕,现在我已经在第三个代码块中更正了它。你需要做同样的事情。我建议不要使用这种方法,直到您了解这些东西如何更好地工作(如果您遵循有关重新打开/删除锁定文件的建议,我的第一个建议没有理由不工作)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多