如何使用Central Package Management并解决交叉引用库构建问题?
解决CPM交叉引用依赖版本统一与构建顺序问题
首先纠正你的逻辑:不需要先构建项目再更新版本号,也不用反复重建交叉引用库。问题出在混淆了本地项目依赖和NuGet包依赖的处理方式,或是构建顺序选择有误。
以下是具体解决办法:
区分本地项目引用与NuGet包引用
如果依赖是解决方案内的本地项目,不要用PackageReference,改用ProjectReference。比如LibraryA依赖LibraryB,直接在LibraryA的csproj里添加:<ProjectReference Include="..\LibraryB\LibraryB.csproj" />这种方式下,MSBuild会自动处理构建顺序,先构建LibraryB再构建LibraryA,同时CPM依然能统一项目中其他NuGet包的版本。
若依赖是自制NuGet包
如果你要把本地项目打包成NuGet包通过CPM管理,按以下步骤操作:- 先构建所有依赖项目,用
dotnet pack生成NuGet包; - 创建本地NuGet源(比如执行
mkdir LocalNuGet,再运行dotnet nuget add source ./LocalNuGet -n LocalSource); - 将打包好的NuGet包复制到本地源目录;
- 确保Directory.Packages.props里的版本和打包版本一致,再执行构建,此时就能找到依赖包。
- 先构建所有依赖项目,用
直接构建整个解决方案
不要单独构建单个库,执行dotnet build YourSolution.sln,MSBuild会自动分析所有项目的依赖链,按正确顺序构建所有项目,既解决找不到依赖的问题,又能让CPM的版本统一配置生效。配置本地NuGet源(针对自制包)
在NuGet.config或Directory.Packages.props里添加本地源,确保还原时能找到自己构建的包:<packageSources> <add key="LocalSource" value="./LocalNuGet" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </packageSources>
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

