Gianluca Mancini’s first-half header was enough to give Roma a slim lead in their Europa League quarter-final tie with rivals Roma.
Milan had previously won both Serie A clashes between the two sides this season but it is Roma who take a 1-0 lead into the second leg at the Stadio Olimpico next week.
Last season’s beaten Europa League finalists will fancy their chances of reaching a semi-final against either West Ham or Bayer Leverkusen after edging to victory at the San Siro.
The visitors started the quicker of the two teams but it was Milan midfielder Tijjani Reijnders who had the first meaningful effort of the contest as he forced a decent save out of Mile Svilar.
At the other end, Mike Maignan made a terrific stop to keep out a deflected Stephan El Shaarawy strike, although Romelu Lukaku appeared offside in the build-up.
However, Roma would take the lead from the resulting corner as Mancini slipped his defender to head in Pablo Dybala’s set-piece.
Having scored the winning goal in the derby clash with Lazio last week, the Italy defender is proving a handful at the other end of the pitch.
Milan went in search of a leveller and Olivier Giroud came close only to see two quick-fire efforts both cleared off the line by Lukaku.
An acrobatic overhead kick from Rafael Leao was off-target with Reijnders again testing Svilar before the break.
The Netherlands midfielder was again thwarted by Svilar in the Roma goal soon after the interval.
Roma skipper Lorenzo Pellegrini flashed a shot wide of the target on the hour-mark, with Bryan Cristante following suit shortly after.
Theo Hernandez and Reijnders came close for Milan as they pushed for a leveller, Svilar on hand to tip a cross-cum-shot from Yacine Adli onto the crossbar.
The hosts’ goal never came as Giroud also hit the woodwork with a marvellous late chance.