打破一个大型解决方案是多个项目,用于代码库的组织问题,这在早期版本的.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"]
}