在ASP.NET 5(Core)中添加类库项目的引用问题

17

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

我试图将一个普通(即非VNext)类库项目引用到我的VNext Web应用程序中。如果我按照以下步骤操作:

  1. 创建一个新的Web应用程序项目

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

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

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

  5. 添加对这个类库的引用

现在它可以构建成功,但如果我尝试添加“using MyClassLibrary1”,它会说当前上下文中不存在MyClassLibrary1。

如果我将类库更改为以.NET 4客户端配置文件为目标(默认情况下是4.6),它确实可以正常工作,但.NET 4完整或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"
  }
}

我在将一个类库项目添加到现有项目的解决方案后,甚至无法构建。但是,如果我重新开始一个新项目,就可以工作,可能的原因是什么? - Randeep Singh
作为 ASP.NET Core 的问题已经提出:https://github.com/aspnet/Home/issues/1513 - OzBob
6个回答

23

这是我使用beta6进行的操作 (更新:RC1 UPDATE 1版本仍然有效)。

  1. 从你的project.json文件中删除框架 => dnxcore (无论如何都不能使用完整的 .net 类库来定位它)
  2. 在目标项目中右键单击 References => 添加引用
  3. 浏览并选择您想要添加的引用dll文件。

这将在您的project.json文件中添加一个引用条目。 在幕后,该dll文件将复制到解决方案的/lib目录中,并在/wrap文件夹中创建一个只有project.json文件的"包装项目"。包装项目在此处有文档说明(尽管不够充分):https://github.com/aspnet/Home/wiki/Project.json-file#bin-syntax-wrapping-a-dll

就是这样!我刚刚测试了这个场景。希望这能帮助到您。


1
太好了,我没有找到那个链接,文档有些粗糙,可以理解。谢谢。 - Martin Richards
1
非常感谢您的答复,mbudnik。这是我找到的第一个清晰明了的答案。在尝试了其他许多方法后,这是我第一次能够在ASP.NET 5 MVC 6 beta6前端项目中引用和利用自己的类库项目来实现多项目解决方案。我告诉自己要远离前沿技术,但每年我都会涉足其中,结果总是碰壁。 - StackOverflowUser
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - zemien
那么我们不能再添加项目引用了吗? - ewahner
我在根目录的wrap文件夹中检查了一下,现在其他团队成员已经神奇地解决了这个问题。 - rfcdejong

15
如果其他人遇到此特定错误,请通过“浏览”实际文件添加引用,而不要使用“项目”选项卡。这似乎不会存储路径,但会像平常一样将引用添加到project.json中。显然,在编写本文时(beta7)存在一个错误。

刚遇到这个错误,但已经解决了。有点好笑,从项目中添加引用时似乎没有版本对应。 - Mark Homer
我在使用ASP.NET 5 MVC前端项目引用打包的ASP.NET 5类库时遇到了问题。有什么办法可以处理打包项目的问题吗?顺便说一下,我正在使用RC1版本。 - Sam

2

以下是我在ASPT.NET 5 RC 1 Update 1中的操作步骤:

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

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

  4. "dnxcore50": { } 放回文件中。这不会恢复 DNX 5 Core。


1
这些答案真的帮助我弄清楚了问题所在。在我的情况下,清理解决方案“wrap”文件夹中的内容解决了构建错误。我已经重命名了一些类库,但旧的仍然存在。移除旧项目并更新现有项目中的project.json文件就可以解决问题。确保project.json文件中的依赖引用正确的项目。

下面是一个例子:

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

1

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


1
是的,它可以构建。我尝试将.NET 4.6.1类库引用添加到ASP.NET Core网站中。当在IIS Express下运行时,在浏览器中会显示“无法访问此网站”的消息。启动类构造函数不会被调用。 - Andez
这里也有同样的问题。它能够构建,但在IISExpress调试(F5)启动后崩溃。 - Alan Araya

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接