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

时间:2016-04-24 23:18:54

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

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

如何使用.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)' for' .NETCoreApp,Version = v1.0'。

我理解原因。在恢复时,NuGet正试图在NuGet.config上的指定Feed上找到它。但它不应该这样做,它应该使用兄弟文件夹中的那个。

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

这里是怎么做的?我们如何在同一个解决方案中引用另一个项目?考虑到这种依赖,我们如何使用.NET CLI恢复/构建/运行?

2 个答案:

答案 0 :(得分:4)

在定义了解决方案对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

答案 1 :(得分:2)

根据the documentation on writing libraries,在解决方案中指定对另一个项目的依赖关系的新正确方法是:

{
    "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"]
}