【发布时间】:2020-05-22 18:10:47
【问题描述】:
有没有办法让 NuGet/MSBuild 在构建期间报告 .csproj 目标框架/NuGet 包 DLL 引用不兼容错误?
考虑一个有两个分支的应用程序:
- 主干分支 - 目标 .NET Framework 4.8
- 维护分支 - 面向 .NET Framework 4.5.2。
考虑一个多目标的 NuGet 包 (PackageX)。它针对 netstandard2.0 和 netstandard1.1。由于 NuGet 包是多目标的,因此它将具有以下 lib 文件夹:
- \packages\PackageX\lib\netstandard1.1\
- \packages\PackageX\lib\netstandard2.0\
如果开发人员在面向 .NET Framework 4.8 的 Trunk 分支中添加对 PackageX 的引用,则 .csproj 文件将引用目录 \packages\PackageX\lib\netstandard2.0 中的 PackageX.dll强>\。
如果开发人员将他的更改从 Trunk 分支反向移植到 Maintenance 分支,则对文件夹 \packages\PackageX\lib\netstandard2.0\ 中 PackageX.dll 的 .csproj 引用将被反向移植.但是,这是维护分支代码的无效路径。因为维护分支代码面向 .NET Framework 4.5.2,所以正确的 DLL 引用应该是 \packages\PackageX\lib\netstandard1.1\。
开发人员在反向移植他的更改时几乎肯定不会意识到上面提到的 NuGet DLL 路径引用问题。 .csproj 构建时没有任何关于此问题的错误或警告。直到将维护分支代码部署到没有安装任何 .NET Framework 版本 > 4.5.2 的 QA 服务器时,才会检测到问题。会报的错误是:
FileNotFoundException - Could not load file or assembly 'netstandard, Version=2.0.0.0...
它似乎应该有某种方法来检测这个 .csproj 目标框架版本/NuGet lib DLL 引用问题作为构建过程的一部分。任何人都知道可以采取任何诡计来检测和报告此问题吗?
【问题讨论】:
-
您的 QA 服务器是否构建了您的项目然后发布了它?它有 VS 还是只有构建工具?此外,当您将项目迁移到 QA 服务器时,您应该将项目框架版本降级为
framework<=4.5.2。
标签: .net visual-studio msbuild nuget