在Bamboo上构建多项目解决方案,如何让dotnet build自动选对框架?
嘿,我来帮你搞定这个在Ubuntu 16.04的Bamboo上构建多目标框架类库的问题!其实dotnet build本身就支持自动识别项目的目标框架配置,只要你的项目和构建任务配置到位,完全不用逐个指定项目或框架。下面是具体的步骤:
1. 确认项目文件的多目标框架配置正确
首先要保证每个类库项目的.csproj文件里已经正确设置了多目标框架,注意是复数形式的TargetFrameworks:
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
而测试项目因为只需要面向netcoreapp2.0,所以用单数的TargetFramework:
<TargetFramework>netcoreapp2.0</TargetFramework>
这个配置是dotnet build自动识别框架的基础,一定要检查好。
2. 在Bamboo中配置基础的dotnet build命令
在Bamboo的构建任务里,直接使用最基础的dotnet build命令即可,它会自动遍历解决方案里的所有项目,根据每个项目的配置构建对应的框架:
dotnet build YourSolution.sln --configuration Release
如果需要构建Debug版本,去掉--configuration Release就行。这个命令会自动处理所有类库的net461和netstandard2.0目标,以及测试项目的netcoreapp2.0目标。
3. 解决Ubuntu上构建.NET Framework 4.6.1的依赖问题
因为Ubuntu本身不原生支持.NET Framework,所以需要安装Mono来编译net461的项目。在Ubuntu 16.04上执行以下命令安装:
sudo apt-get update sudo apt-get install mono-complete
安装完成后,dotnet build会自动调用Mono来处理net461的编译任务,不需要额外配置参数。
4. 验证构建结果
构建完成后,你可以在每个类库项目的bin/[配置名]目录下看到两个框架的输出文件夹:net461和netstandard2.0,里面就是对应框架的类库文件;测试项目的输出则会在netcoreapp2.0目录下。
5. 可选:排除不需要构建的项目
如果解决方案里有个别项目不需要构建,可以用--exclude参数指定排除,比如:
dotnet build YourSolution.sln --configuration Release --exclude SomeUnwantedProject.csproj
这样设置之后,dotnet build就会自动识别每个项目的目标框架,完成全量构建,完全不用你逐个指定项目或框架啦!
内容的提问来源于stack exchange,提问作者Sinaesthetic

