【问题标题】:Add Class Library reference to ASP.NET Core project将类库引用添加到 ASP.NET Core 项目
【发布时间】:2017-04-03 15:42:52
【问题描述】:

我正在使用 VS Pro 更新 3

我一直在关注这里的指南:https://www.hanselman.com/blog/HowToReferenceAnExistingNETFrameworkProjectInAnASPNETCore10WebApp.aspx

我有 3 个现有的 .NET 4.5.1 类库,用 VB.NET 编写,但我认为这并不重要,因为它们都在 CLR 上。
我的 ASP.NET Core 项目是 C#,面向 .NET 4.5.1。
这是我的 project.json 的框架部分:

  "frameworks": {
    "net451": {
      "dependencies": {
        "WebApp.Api.Services": {
          "target": "project"
        }
      }
    }
  },

如果我使用 Add Existing Project 将我所有的 VB.NET 类库添加到我的解决方案中并尝试将它们添加为项目引用,我会收到以下错误:

当前项目不支持项目 XXX 类型,无法添加 作为参考

我还尝试添加 C# 类库 (WebApp.Api.Services),添加 VB.NET 引用,然后添加 C# 类库作为对 ASP Core 项目的引用
这样做可以显示解决方案资源管理器中的引用,似乎我可以使用 C# 类库中的类型,但我不能在我的代码中使用 VB.NET 库的类型。

我还创建了一个 NuGet 包,但没有运气
我已经读到您可以以某种方式创建一个“包装器”项目,或者 Visual Studio 可以自动执行此操作。

有没有人尝试过将 VB.Net 项目添加到 ASP Core 解决方案?

【问题讨论】:

  • 你说得对,语言应该无关紧要。您使用的是什么版本的 Visual Studio?
  • 我正在使用 VS Pro 2015 更新 3
  • 如果您升级到 VS 2017 并从 project.json 迁移到 csproj,您将获得“项目参考”功能,该功能应该允许您在没有任何变通方法的情况下做您想做的事情。

标签: vb.net reference asp.net-core .net-core


【解决方案1】:

为 .NET Core 构建的项目不能使用为 .NET Framework 构建的类库。它们彼此不直接兼容。事实上,当你说:

我的 ASP.NET Core 项目是 C#,面向 .NET 4.5.1。

如果它的目标是 .NET 4.5.1,那么它实际上并不是一个 .NET Core 项目。

您应该将您的类库移植到 .NET Standard;这样它们就可以被广泛的compatible frameworks 使用。也可以有一个类库target multiple frameworks

【讨论】:

  • 其实可以在.NET 4.5.1上使用ASP.NET Core:stackoverflow.com/a/38166777/3191599
  • @NateBarbettini:Gigi 可能指的是被标记为.net-core 的问题,所以在这个前提下:简短的回答是:不可能使用类库,因为类库总是意味着完整的 .NET Framework 目标。如果新式或旧式 PCL 针对特定配置文件(即portable-net45+win8 或类似),则只能将新式或旧式 PCL 与 .NET Core 一起使用
  • 长答案是:可能,如果你 a) 使用 vs 2017(或 2015 使用 nuget) b ) 110% 确定它不使用 .NET Core 中不可用的任何类型 c) 你使用 importPackageTargetFallback 强制 nuget 恢复这个包,尽管它的目标是它不兼容。这是非常危险,因为您还允许在 .NET Core 中使用任何 net45 包,即使它不兼容,所以一个 不应该使用该路由,而是转换库到 PCL 目标 netstandard1.x
  • 是的,抱歉,我的意思是使用 VS 模板 ASP.NET Core Web App (.NET Framework),所以实际上不是 .NET Core,我会更新我的问题.....我确实发现所有这些不同的框架有点令人困惑。不幸的是,将我们所有的代码移植到 .NET Standard 可能需要数年时间,我们可能需要从头开始。肯定有办法吗?有没有可用的移植工具?
  • 经过更多调查,我在日志中发现了一个System.BadImageFormatException,所以我认为这可能是 x86 与 x64 的问题,而不是我最初的想法 - 我会做更多的测试
【解决方案2】:

我设法解决了我的问题。

指南here 是正确的,我遇到了另一个我没有意识到的不同问题。
我发现了一个System.BadImageFormatException 错误,导致我提出以下问题Start an asp.net core project as x86 under visual studio 2015
我卸载了 x94 版本的 .NET Core 并安装了 x86 版本。

我仍然无法向 ASP Core 项目添加对 VB.NET 库的引用,因此我的 C# 服务“Bridge”库至关重要。

在我的“桥”库中,我有可以从 ASP 控制器返回的模型:

Public BridgeModelA : VB.NETLibrary.ActualModelA
{
…
}

然后是扩展

Public static VB.NETLibrary.ActualModelA ToModel(this BridgeModelA)
{
…
}

虽然这些模型的基成员不能在控制器中访问,但由于 ASP proj 没有引用 VB projs,它们由控制器返回,并带有包含所有基成员的 JSON 结果。
这实际上很棒,因为它适合瘦控制器的设计。

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多