在同一存储库中处理针对.NET Framework 4.5和4.6.2两个版本的项目的问题

时间:2018-03-14 11:17:20

标签: .net visual-studio-2015 nuget .net-4.5 nuget-package-restore

最近我们将.NET解决方案从.NET Framework 4.5升级到4.6.2。该项目位于Git存储库中,我们拥有该存储库的多个分支。我们将Nuget软件包重新定位到4.6.2,然后我可以看到Nuget软件包在重建解决方案时自动恢复,这绝对是好的和预期的。现在,大多数软件包都有一个名为" net462"其中包含针对.NET Framework 4.6.2的程序包的DLL。但是,文件夹" net45"现在是空的。

问题是,当开发人员切换到指向.NET Framework 4.5的旧分支时,他/她会获得与未找到引用相关的错误数。我假设因为存在" net45"的文件夹。但那里没有集会。

有人可以建议我如何在具有正确Nuget依赖关系的同一台机器上成功构建两个分支(目标为4.5和4.6.2)?

对此的任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

  

有人可以建议我如何在具有正确Nuget依赖关系的同一台机器上成功构建两个分支(目标为4.5和4.6.2)?

同意Hans的评论“为什么net45子目录是空的,而不是标准行为,这是不明显的。他们是手动剥离并检查源控制吗?”。 Nuget不会删除.NET 4.5文件夹中的.dll文件。

当您切换到指向.NET Framework 4.5的旧分支时,Properties winodw中的程序集路径应指向...\lib\net45\..文件夹。并且Git的默认行为是不将packages文件夹添加到源代码管理中。那么,从旧分支构建项目,Visual Studio将自动恢复nuget包。恢复完成后,Visual Studio可以在文件夹“net45”中找到程序集。

因此,要解决此问题,首先,您应该确保 nuget存储库中的nuget包包含“net45”文件夹中的程序集,然后当您切换到旧分支时,请检查如果解决方案文件夹中有\packages文件夹,如果是,则删除它并检查在旧分支上构建项目时是否存在nuget恢复行为(检查输出窗口上的日志)。

希望这会有所帮助。

答案 1 :(得分:0)

听起来,针对.NET 4.5的分支机构正在抓取最新版本的NuGet软件包,而不是将自己限制在支持.NET 4.5的NuGet软件包版本中。有关如何执行此操作的示例,请参阅this answerthe Microsoft documentation on NuGet versioning包含有关限制版本范围的其他详细信息)。

理想情况下,您将NuGet包更改为.NET 4.6.2至少是NuGet包的新主要版本,但只要版本不同,限制版本就可以使用。