【问题标题】:Issue adding reference to class library project in ASP.NET 5 (Core)在 ASP.NET 5 (Core) 中添加对类库项目的引用的问题
【发布时间】:2015-10-26 13:59:45
【问题描述】:

您好,首先我知道之前有人问过类似的问题,但现在它们已经过时了,我使用的是 Visual Studio 2015 rtm 和 ASP.NET 5 beta 6。

我正在尝试向我的 vnext Web 应用程序添加对普通(即非 vnext)类库项目的引用。如果我按照以下步骤操作:

  1. 创建一个新的网络应用项目

  2. 从 project.json 中移除“dnxcore50”框架

  3. 为普通类库添加新项目

  4. 手动将类库项目移动到 /src 文件夹中(否则我会收到错误消息“无法解析依赖项 MyClassLibrary1 >= 1.0.0-*。”)

  5. 添加对此类库的引用

现在它构建好了,但是如果我尝试添加“使用 MyClassLibrary1”,它会说 MyClassLibrary1 在当前上下文中不存在。

如果我将类库更改为目标 .NET 4 客户端配置文件(默认为 4.6),它确实可以正常工作,但是 .NET 4 full 或 4.5 不起作用。我需要它是 4.5 或更高版本,因为我需要引用各种需要它的包。理想情况下,一切都只针对 4.6。

这是我的 project.json 文件:

{
  "webroot": "wwwroot",
  "userSecretsId": "aspnet5-WebApplication2-6767111e-0eba-42a4-9d68-4b6c20767518",
  "version": "1.0.0-*",

  "dependencies": {
    "EntityFramework.SqlServer": "7.0.0-beta6",
    "EntityFramework.Commands": "7.0.0-beta6",
    "Microsoft.AspNet.Mvc": "6.0.0-beta6",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta6",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta6",
    "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta6",
    "Microsoft.AspNet.Authentication.Google": "1.0.0-beta6",
    "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta6",
    "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta6",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta6",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta6",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta6",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta6",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta6",
    "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta6",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta6",
    "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta6",
    "Microsoft.Framework.Logging": "1.0.0-beta6",
    "Microsoft.Framework.Logging.Console": "1.0.0-beta6",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta6"
  },

  "commands": {
    "web": "Microsoft.AspNet.Hosting --config hosting.ini",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": {
      "dependencies": {
        "MyClassLibrary1": "1.0.0-*"
      }

    }
  },

  "exclude": [
    "wwwroot",
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "node_modules",
    "bower_components",
    "**.xproj",
    "**.user",
    "**.vspscc"
  ],
  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}

还有我的 global.json 文件:

{
  "projects": [
    "src",
    "test",
    "wrap"
  ],
  "sdk": {
    "version": "1.0.0-beta6"
  }
}

【问题讨论】:

  • 在将类库项目添加到现有项目的解决方案后,我什至无法构建。但是,如果我重新开始,它会起作用,可能是什么原因。
  • 作为 aspnet 核心问题提出:github.com/aspnet/Home/issues/1513

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


【解决方案1】:

这就是我使用 beta6 的方式(更新:对于 RC1 更新 1 仍然有效)。

  1. 从你的 project.json 中移除 frameworks => dnxcore(无论如何你都不能使用完整的 .net 类库来定位它)
  2. 在您的目标项目中,右键单击 References => Add Reference
  3. 导航并选择要添加的引用 dll。

这将为您的 project.json 文件添加一个参考条目。 在幕后,将 dll 复制到解决方案中的 /lib 目录,并在 /wrap 文件夹中创建仅包含 project.json 文件的“wrapper project”。包装器项目记录在这里(虽然不够好):https://github.com/aspnet/Home/wiki/Project.json-file#bin-syntax-wrapping-a-dll

就是这样!我刚刚测试了这个场景。希望这会有所帮助。

【讨论】:

  • 太好了,我没有找到那个链接,可以理解的是文档有点粗糙。干杯。
  • 非常感谢您的回答,mbudnik。第一次有人清楚地说明(我发现)。在尝试了许多其他(甚至是最近的)答案的许多其他方法之后,我第一次能够在 ASP.NET 5 MVC 6 beta6 前端项目的多项目解决方案中引用和利用我自己的类库项目.我告诉自己要远离流血的边缘,然后每年我都直接踏入其中,我的脚会被割伤。
  • 在 RC1 中,我仍然需要手动编辑 project.json 以将其更改为 { assembly, pdb } 的 bin 语法(请参阅 GitHub 文档)。此外,由于我的 DLL 引用是同一解决方案中的项目,因此我需要将它们添加为项目依赖项,并确保网站在项目构建顺序中位于它们下方。
  • 所以我们不能再添加项目引用了?
  • 我签入了根 lvl 上的 wrap 文件夹,现在它神奇地被其他团队成员解决了..
【解决方案2】:

如果其他人遇到此特定错误,关键是在添加引用时通过“浏览”到实际文件中添加引用,而不是使用“项目”选项卡。

这似乎并没有存储路径,而是像往常一样添加了对 project.json 的引用。在撰写本文时显然是一个错误(beta7)。

【讨论】:

  • 刚刚出现了这个错误并修复了它,真的有点开玩笑。从项目中添加引用似乎没有针对它的版本。
  • 我在引用打包的 ASP.NET 5 类库的 ASP.NET 5 MVC 前端项目时遇到了这个问题。知道如何处理打包项目的问题吗?顺便说一句,我正在使用 RC1。
【解决方案3】:

这是我在 ASPT.NET 5 RC 1 Update 1 中的做法:

  1. 添加项目引用
  2. 打开project.json,在"frameworks": 节点内,删除"dnxcore50": { } 行(JSON 不允许注释)。保存 json 文件时,应立即删除 DNX Core 5 引用。

  3. 构建项目。它应该会成功构建。

  4. "dnxcore50": { }放回去。它不会带回 DNX 5 Core。

【讨论】:

    【解决方案4】:

    要在高于 4.5.1 的版本中添加普通 .NET 项目,只需删除 dnxcore 并将 dnx451 重命名为 dnx461

    【讨论】:

    • 是的,它可以构建。我尝试将 .NET 4.6.1 类库引用添加到 ASP.NET Core 网站。在 IIS Express 下运行时,浏览器中会显示“无法访问此站点”消息。启动类构造函数没有被调用。
    • 这里有问题。它在 IISExpress 调试 (F5) 上启动后构建但崩溃。
    【解决方案5】:

    这些答案确实帮助我解决了这个问题。在我的情况下,清理解决方案的“wrap”文件夹中的内容解决了构建错误。我重命名了一些类库,而旧的类库仍在其中。删除旧项目并更新现有项目中的 project.json 文件就可以了。确保 project.json 文件中的依赖项尊重正确的项目。

    这是一个例子:

      "dependencies": {
        "DomainRepository": "1.0.0-*",
        "Domain": "1.0.0-*",
        "DomainContract": "1.0.0-*"
      }
    

    【讨论】:

      【解决方案6】:

      这是一个当前打开的错误。这是链接,因此您可以看到它何时关闭: https://github.com/aspnet/Tooling/issues/245

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 2019-11-16
        • 2015-10-15
        • 1970-01-01
        相关资源
        最近更新 更多