2016-04-24 44 views
5

破解大型解决方案的一个常见问题是组合代码库的多个项目,这很容易在Visual Studio的早期版本的.NET Framework中完成。如何使用.NET CLI指定其他项目的依赖关系?

.NET CLI如何实现同样的功能?假设我们有以下简化方案,例如:

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

现在的ConsoleProject依赖于LibProject假设。直觉上我相信,这意味着在ConsoleProjectproject.json必须包含dependencies部分是这样的:

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

但是,如果我们这样做,当我们试图还原为ConsoleProject或依赖性,当我们试图建立它我们不能这样做。当我们尝试恢复时,我们收到消息

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

我明白原因。恢复时,NuGet正试图将其作为NuGet.config上指定提要的包进行查找。但它不应该这样做,它应该使用兄弟文件夹上的那个。

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

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

+1

任何运气,如果你做' “LibProject”:{ “目标”: “项目”}'? – khellang

+0

在使用'csproj'格式的dotnet cli的更新版本中,您可以运行'dotnet add reference ../ MyProject/MyProject.csproj' https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-add-reference – dbattaglia

回答

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

+0

感谢您的回答,但这并没有奏效。也许它以前用DNX工作过,但使用.NET CLI它不起作用。实际上,这种方法似乎很奇怪,因为我们在'src/ConsoleProject'文件夹中运行'dotnet restore',而'global.json'坐在'src'文件夹的旁边,所以'dotnet'工具链不能看到它。无论如何,我面临的问题并不是真正指定一个版本,而是让'dotnet restore'从同级文件夹中选择'LibProject',而不是查看NuGet提要。 – user1620696

+0

它看起来不再需要global.json文件。你使用的是哪种版本的网点?这是一个类似于你的问题,似乎正在工作。 https://github.com/dotnet/cli/issues/966#issuecomment-174206475 –

+1

它是版本1.0.0-rc2-002476。无论如何,我现在就开始工作了,这是造成问题的依赖关系上的拼写错误。无论如何:我已经发现了一些细节 - 对于使用'dotnet'工具链,'global.json'文件并不是真的需要,但它是VS编码中Omnisharp工作所必需的。另外,我们确实可以引用该项目的版本,比如''LibProject“:”1.0.0 - *“'也可以正常工作。感谢您的帮助。 – user1620696

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"] 
} 
+1

文档链接现在已损坏。我无法完成这项工作。我猜测他们已经改变了工具,因为帮助文档已经消失。 – trevorc

+1

更新后的链接:https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries#how-use-use-multiple-projects –

+0

已更新。谢谢@tanguy_k! –