Class 库(包)中的目标特定框架

Target specific framework in Class Library (Package)

我正在尝试在 VS 2015 中使用新的 Class Library (Package) 项目。

我想瞄准 dnx451,所以我的 package.json 看起来像这样:

{
  "version": "1.0.0-beta-1",
  "description": "Foo",
  "authors": [ "Foo" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "dependencies": {
    "Newtonsoft.Json": "8.0.1",
    "Microsoft.AspNet.Razor": "4.0.0-rc1-final",
    "Microsoft.Extensions.Configuration": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final",
    "System.Net.Http": "4.0.1-beta-23516"
  },

  "frameworks": {
    "dnx451": { }
  }
}

构建很好,我得到:

Recaptcha-dnxcore -> C:\Users\Epic\Documents\artifacts\bin\Foo\Release\Foo.1.0.0-beta-1.nupkg

现在我创建一个 Web 项目并编辑其 project.json 文件,使其仅针对 dnx451 框架:

"frameworks": {
    "dnx451": { }
 },

当我添加对 Foo 包的引用时,出现错误:

The dependency Foo 1.0.0-beta-1 in project WebApplication7 does not support framework DNX,Version=v4.5.1.

如何从支持 dnx451Class Library (Package) 项目创建 Nuget 包?


根据下面的评论,这是完整的 project.json 网络应用程序:

{
  "userSecretsId": "aspnet5-WebApplication7-0b4c05f0-6435-486b-9738-1b6aa3daee2c",
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
    "System.Net.Http": "4.0.1-beta-23516",
    "Foo": "1.0.0-beta-1"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { }
  },

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

class 库也应该有它自己的 project.json 并定义它支持的框架:

"frameworks": {
    "dnx451": { }
 }

如果您添加对项目的引用,请不要添加版本号,因为它会在任何 Nugget 提要上搜索包。

只需添加对 Foo 的引用,如下所示:

    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
    "System.Net.Http": "4.0.1-beta-23516",
    "Foo": ""
  },

看看 this 答案。

仅当两个项目都在同一解决方案中时,您才能添加对 class 库项目的直接引用。

如果您的项目不在同一个解决方案中,您必须转到 class 库项目属性,打开“构建”选项卡并选中“在构建时生成输出”选项

NuGet 包将在每个项目构建的{SolutionDir}\artifacts\bin{ProjectName}{Configuration} 目录中创建。

要使用该库,请将 NuGet 包发布到 nuget.org 或任何其他 NuGet 提要,然后使用 Visual Studio(参考 ~> 管理 NuGet 包...)将其添加到您的项目或添加到依赖项属性 在 project.json.

我按照你问题中提到的相同程序进行操作

  1. 我在同一个解决方案中创建了 class 库和 Web 项目,一切正常。

  2. 因为您更专注于使它成为 dnx451 的 NuGet 包目标。我在单独的解决方案中创建了另一个 Web 应用程序,是的,它会抛出错误,因为命名的 NuGet 包很多 "Foo"。我想由于这种恢复包的问题,​​因为它指的是 Global NuGet 提要。

  3. 然后我尝试使用这个 link How to install a Nuget Package .nupkg file locally?

  4. 在本地引用 "Foo" Nuget 包
  5. 确保新创建的本地包源应该在 TOP 和 Offical NuGet 第二位。

  6. 在此之后,我在单独的解决方案中恢复了 Web 应用程序,它构建良好并且 运行 也正常。甚至我也在控制台应用程序中安装了这个 NUGET

希望一切顺利。