在project.json中,“dependencies”和“frameworkAssemblies”的区别是什么?

18

使用project.json的文档为ASP.NET 5应用程序提供了一个示例project.json文件(以下是缩写版本)。

frameworkAssembliesdependencies之间有什么区别?

为什么dnx451使用其中一个,而dnxcore50使用另一个?

{
  "version": "0.1-alpha-*",
  ...
  "frameworks": {
    "dnx451": {
     "frameworkAssemblies": {
        ...
      }
    },
    "dnxcore50": {
     "dependencies": {
       ...
     }
  }
}

1个回答

20

frameworkAssemblies指的是全局程序集缓存(GAC)中存在的程序集。

考虑以下例子:
我想使用 ADO.NET apis(SqlConnection, SqlCommand) 来操作 SQL Server 数据库。我知道这些 apis 是属于 System.Data.dll 的,所以我想引用它。现在当完整版本的 .NET Framework 安装时,它会在 GAC 中安装一些程序集(包括这个 System.Data.dll),因此您会在下面的示例中看到对 frameworkassemblies 的引用。关于 CoreClr,我需要找出这些类型存在于哪个软件包中。为此,您可以使用名为 PackageSearch 的网站(由 ASP.NET 团队成员构建)进行搜索,找到包名。基于此,您将发现 System.Data.SqlClient 是该软件包。由于此软件包是为 CoreClr 构建的,因此它是 dnxcore50 部分内的 dependencies 部分的一部分。

{
    "version": "1.0.0-*",
    "description": "Test App",
    "dependencies": {
    },
    "frameworks": {
        "dnx451": {
            "frameworkAssemblies": {
                "System.Data": "4.0.0.0"
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Data.SqlClient": "4.0.0-beta-*"
            }
        }
    }
}

现在假设你想在你的应用程序中添加对json序列化和反序列化的支持,并且想要引用 Json.Net nuget 包。Json.Net nuget 包支持桌面和核心clr,因此您可以将它放在两个框架通用的 dependencies 部分中。

{
    "version": "1.0.0-*",
    "description": "Test App",
    "dependencies": {
        "Newtonsoft.Json": "6.0.6"
    },
    "frameworks": {
        "dnx451": {
            "frameworkAssemblies": {
                "System.Data": "4.0.0.0"
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Data.SqlClient": "4.0.0-beta-*"
            }
        }
    }
}

感谢您提供 Package Search 的链接,这个网站真是太棒了! - http://packagesearch.azurewebsites.net/ - timdougall

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