对于组织代码库的问题,打破大型解决方案通常是多个项目,这很容易在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恢复/构建/运行?
答案 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"]
}