Werner,
keeping things simple, here is one way:
primsCubes =
DiscretizeRegion /@ {Cuboid[{-10, -10, 0}, {10, 10, 40}],
Cuboid[{-26, -10, 0}, {26, 10, 5}]};
primsHoles =
DiscretizeRegion /@ {Cuboid[{-1, -12, 30}, {1, 12, 50}],
Cylinder[{{-20, 0, 35}, {20, 0, 35}}, 2],
Cylinder[{{0, -20, 25}, {0, 20, 25}}, 7],
Cylinder[{{-18, 0, -1}, {-18, 0, 12}}, 4],
Cylinder[{{18, 0, -1}, {18, 0, 12}}, 4]};
part1 = Fold[RegionDifference, primsCubes[[1]], primsHoles[[;; 3]]]
part2 = Fold[RegionDifference, primsCubes[[2]], primsHoles[[4 ;;]]]
workpiece = RegionUnion[part1, part2]
Regards -- Henrik
EDIT / ADDENDUM:
Why do you not want to simply use CSGRregion[]
?