You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含NuGet引用的多个解决方案间共享类库源码?

可行解决方案

方案1:给共享类库添加预编译NuGet还原任务

直接在共享类库的.csproj文件中插入MSBuild目标,让编译前自动触发NuGet包还原到类库目录的../packages路径:

<Target Name="PreCompileNuGetRestore" BeforeTargets="Build">
  <Exec Command="nuget restore &quot;$(ProjectPath)&quot; -PackagesDirectory &quot;$(ProjectDir)..\packages&quot;" />
</Target>

这样不管是直接编译类库,还是通过solution1/solution2编译,都会先自动把依赖包下载到类库上层的packages文件夹,保持原HintPath路径有效。

注意:确保系统环境变量能找到nuget.exe,如果找不到,把命令里的nuget替换成nuget.exe的完整路径(比如C:\tools\nuget.exe)。

方案2:修改解决方案的NuGet配置

在solution1和solution2的根目录下新建(或修改).nuget\NuGet.Config文件,指定类库依赖包的还原目录:

<configuration>
  <config>
    <add key="repositoryPath" value="..\..\ClassLibrary\packages" />
  </config>
</configuration>

(路径需根据类库相对于解决方案的实际位置调整,比如类库和solution1同级的话,路径改为../ClassLibrary/packages)

这个配置会让解决方案还原包时,自动把类库的依赖包下载到指定的类库上层packages目录,且不会修改类库原有的HintPath。

方案3:迁移到PackageReference格式(长期最优方案)

如果你的项目支持(.NET Framework 4.7.2+或.NET Core/5及以上),将类库的NuGet引用从packages.config迁移到PackageReference:

  1. 删除类库根目录的packages.config文件
  2. 在.csproj中替换原有引用为:
<PackageReference Include="Dapper" Version="1.60.6" />

PackageReference会自动处理包的下载与引用,无需手动维护HintPath,无论从哪个解决方案编译,都会自动还原包到全局或解决方案级缓存,彻底解决路径依赖问题,同时保证类库在两个解决方案中的一致性。


内容的提问来源于stack exchange,提问作者just-an-average-programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:18