如何使用 .NET CLI 指定对其他项目的依赖关系



打破一个大型解决方案是多个项目,用于代码库的组织问题,这在早期版本的.NET Framework中很容易从Visual Studio内部完成。

如何使用 .NET CLI 完成相同的操作?例如,假设我们有以下简化的场景:

- Solution Folder
    - global.json
    - src
        - LibProject
        - ConsoleProject

现在假设ConsoleProject取决于LibProject。直觉上,我相信这意味着在ConsoleProject中,project.json必须包含如下所示的dependencies部分:

"dependencies": {
    "Microsoft.NETCore.App": {
        "type": "platform",
        "version": "1.0.0-*"
    },
    "LibProject": "1.0.0-*"
}

但是如果我们这样做,当我们尝试恢复ConsoleProject的依赖项或尝试构建它时,我们就无法做到这一点。当我们尝试恢复时,我们收到消息

无法解析"LibProject (>= 1.0.0)"为".NETCoreApp,版本=v1.0'。

我明白原因。还原时,NuGet 尝试将其作为包在NuGet.config上的指定源上查找。但它不应该这样做,它应该使用同级文件夹中的那个。

在以前版本的 .NET Core 中,我们将通过 VS 添加引用,然后,如果我们尝试构建ConsoleProject,VS 将首先构建LibProject并使用相应的 DLL。

这里是如何做同样的事情的?我们如何在同一解决方案中引用另一个项目,以及如何在考虑这种依赖关系的情况下使用 .NET CLI 还原/构建/运行?

在 global.json 文件上定义解决方案的项目后,只需在 project.json 上按名称引用它们,而无需特定版本。

例:

global.json

{
    "projects":[
        "ConsoleProject",
        "LibProject"
    ]
}

ConsoleProject/project.json

{
    "dependencies":{
        "LibProject":"",
    }
}

你可以在这里找到一个更好的例子:http://forums.dotnetfoundation.org/t/referencing-another-project-in-net-core/1298/2

或者在此存储库中:https://github.com/cartermp/dnx-apps/tree/master/multiple-projects

根据有关编写库的文档,在解决方案中指定对另一个项目的依赖项的新的正确方法是:

{
    "dependencies":{
        "AwesomeLibrary.Core": {
            "version": "1.0.0",
            "target": "project"
        }
    }
}

target: project位告诉 NuGet 它不应在包源中查找。

这假定您的解决方案具有以下目录结构:

AwesomeLibrary
|__global.json
|__/src
   |__/AwesomeLibrary.Core
      |__Source Files
      |__project.json
   |__/AwesomeLibrary.Other
      |__Source Files
      |__project.json
/test
   (... etc)

使用global.json文件,例如:

{
    "projects":["src", "test"]
}

相关内容

最新更新