【问题标题】:How can I reference a class in MVC project that retrieves data from database with asp.net core如何引用 MVC 项目中使用 asp.net 核心从数据库中检索数据的类
【发布时间】:2017-10-06 15:02:38
【问题描述】:

我有一个 MVC 应用程序,其中包含一个名为 DataAccess 的类,该类从数据库中检索数据。我添加了 asp.Net Core 应用程序,并在 asp.Net Core 应用程序中引用了 MVC 应用程序。 问题是当我调用其中一个 DataAccess 方法并编译解决方案时,我得到一个错误:

错误 CS0012 类型“DataTable”是在一个程序集中定义的,该程序集是 未参考。您必须添加对程序集“System.Data”的引用, 版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089'。

请参阅下面的 .net Core API 代码:

using Microsoft.AspNetCore.Mvc;
using shopping;
using System.Collections.Generic;
using System.Data.Common;

    namespace ShoppingAPI.Controllers
    {
        [Route("api/[controller]")]
        public class ValuesController : Controller
        {
            // GET api/values
            [HttpGet]
            public IActionResult  Get()
            {
                DataAccess da = new DataAccess();
                da.GetDataTable("SELECT * FROM USERS;", new List<DbParameter>());
                return Ok();
            }
}

谁能给我建议?

【问题讨论】:

  • 你能检查一下你的参考资料吗?我想你不会在它下面看到system.data。如果是这样,请将其添加为参考
  • 您必须添加对程序集 'System.Data... 的引用...(添加引用 > 程序集 > 框架)。
  • 是的,所以您的库是针对 .NET Framework 而不是 .NET Standard 编译的?或者您没有对 System.Data 的引用。
  • 您是否尝试从 AspNetCore 引用 MVC 4/5?正如 CodeCaster 所提到的,您将无法这样做,因为 MVC 4/5 位于 .NET Framework 上,而 AspNetCore 位于 .NET Core 上(除非您的 AspNetCore 应用程序以 .NET Framework 为目标)。您最好将共享功能放入其自己的 .NET Standard 类库中,以便可以从两个 UI 框架和两个平台上引用它。
  • 我试图引用 MVC 4。我试图从引用的 MVC 项目中的另一个类中调用一个方法,该类不使用数据库并且它有效,这意味着错误仅发生在从中检索数据的类中数据库。我检查了引用的项目并且 System.Data 在那里。在 .net Core 应用中,我添加了 System.Data.Common

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


【解决方案1】:

快速解决方案

第 1 步。针对正确的框架

假设您使用的是 Visual Studio 2017,您可以在这里解决问题。

  1. 右键单击您的项目并选择Edit *****.csproj

  2. .csproj文件中,需要将目标框架替换为.NET Framework。

例如:

// incorrect
<TargetFramework>netcoreapp2.0</TargetFramework>

// correct
<TargetFramework>net462</TargetFramework>

来源:https://docs.microsoft.com/en-us/dotnet/standard/net-standard

有关目标框架名字对象 (TFM) 的列表(即net47netstandard2.0netcoreapp2.0 等*),您可以查看此链接: https://docs.microsoft.com/en-us/dotnet/standard/frameworks

第 2 步。运行 dotnet restore

转到您的输出窗口并运行dotnet restore

有时 Visual Studio 可能会出现异常(取决于您安装了哪个更新),因此您可能需要关闭并重新打开 Visual Studio。否则,有时清理/重新构建可能会奏效。

我们在做什么?

根据您的 cmets,您注意到您正在尝试引用一个 MVC4 项目,这意味着它可能不是使用 .NET Core 框架直接支持的库编写的。相反,它将由 .NET Framework(w/ .NET Core)支持。

上面的解决方案就是为你做的。

【讨论】:

  • 我将 TargetFramework 更改为 net462,但现在我可以访问引用项目中的任何类。有什么想法吗?
  • 我已经完成了第 2 步中的操作。我再次重复了相同的步骤,并将 System.Data.Common 添加到 .Net Core API,它现在可以工作了。谢谢你们!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多