我有一个Visual Studio解决方案,它有两个子项目,这些子项目使用相同的nuget包。我在C++项目方面有多年的经验,但我对 .net 世界和 nuget 包仍然相对较新。我正在尝试同时实现以下目标。
- 将我的主解决方案文件放在项目根文件夹中(请参阅下面的目录结构(
- 将每个子项目(包括 .csproj 文件(包含在各自的子文件夹中
- 只有一个位置包含所有包的列表。我不喜欢在每个子文件夹中都有相同的 packages.config 文件的副本。只想在 Master.sln 文件级别拥有一个,因为所有项目都使用相同的包,我想确保它们使用相同包的相同版本。
- 我还注意到.csproj文件最终包含packages.config文件中内容的副本。有没有办法让包列表只在一个地方没有副本?就像只在 packages.config 文件中而不是在 .csproj 文件中一样?
这是我的项目目录结构
{projects root}
Master.sln
packages.config {is it possible for this file to be at this level}
Proj1
Proj1.sln {do not want solution at this level}
Proj1.csproj
Program.cs
packages.config {do not want at this level}
Proj2
Proj2.sln {do not want solution at this level}
Proj2.csproj
Program.cs
packages.config {do not want at this level}
目前,如果我在VisualStudio中编译Proj1.sln或Proj2.sln文件,则会创建"包"文件夹并正确编译项目。但是,如果我打开 Master.sln(其中包含两个子项目(并编译,则在与 Master.sln 文件相同的级别创建"包"文件夹,但项目不构建,我假设是因为他们找不到包。
任何这方面的帮助将不胜感激。
使用 Nuget 包进行多项目设置
恐怕您必须在每个子文件夹中复制相同的 packages.config 文件,因为NuGet 团队在 NuGet 3.0 中弃用了解决方案级别包:
https://github.com/NuGet/Home/issues/522
Visual Studio 2017的默认nuget版本是4.0及更高版本。
因此,您不能在Master.sln
文件级别只有一个packages.config。