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

Issues working on projects targeting .NET Framework 4.5 and 4.6.2 both versions in same repository

最近我们将 .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 的旧分支时,s/he 会收到与未找到引用相关的错误数。我假设是因为存在 "net45" 的文件夹,但其中没有程序集。

谁能建议我如何在具有正确 Nuget 依赖项的同一台机器上成功构建两个分支(针对 4.5 和 4.6.2)?

如有任何帮助,我们将不胜感激。

谢谢

听起来针对 .NET 4.5 的分支正在获取最新版本的 NuGet 包,而不是将它们自己限制在支持 .NET 4.5 的 NuGet 包版本上。请参阅 this answer for an example of how to do that (the Microsoft documentation on NuGet versioning 包含有关限制版本范围的其他详细信息)。

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

Could anyone please suggest how can I make both the branches (targeting to 4.5, and 4.6.2) building successfully on a same machine with correct Nuget dependencies?

同意 Hans 的评论“为什么 net45 子目录是空的,这不是标准行为并不明显。他们是被手工剥离并签入源代码管理的吗?” . Nuget 不会删除 .NET 4.5 文件夹中的 .dll 文件。

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

中找到程序集

因此,要解决此问题,首先,您应该确保 nuget 存储库中的 nuget 包包含 "net45" 文件夹中的程序集,然后当您切换到旧分支,查看solution文件夹下是否有\packages文件夹,如果有,将其移除并查看在旧分支上构建项目时是否有nuget restore行为(查看log输出 window)。

希望这对您有所帮助。