最近我们将.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)?
对此的任何帮助将不胜感激。
由于
答案 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 answer(the Microsoft documentation on NuGet versioning包含有关限制版本范围的其他详细信息)。
理想情况下,您将NuGet包更改为.NET 4.6.2至少是NuGet包的新主要版本,但只要版本不同,限制版本就可以使用。