Riyad Mahrez struck twice as Manchester City produced a superb all-round performance to reach their first Champions League final with a 2-0 victory over 10-man Paris St Germain.
The Paris-born winger struck in each half at the Etihad Stadium, adding to his effort in the first leg, as the Premier League leaders completed a 4-1 aggregate victory.
PSG threw plenty into attack as they attempted to chase the tie in unexpectedly icy conditions but Mahrez’s second just after the hour proved a killer blow.
As in the first leg, PSG lost their composure in the latter stages and Angel Di Maria was sent off for a petulant stamp on Fernandinho after the ball had run out for a throw-in.
City were far more disciplined. Pep Guardiola’s men defended stubbornly throughout but showed plenty of attacking intent and took the key chances when they came.
They will now face the winners of the other semi-final between Chelsea and Real Madrid in Istanbul later this month.
The shame for City was that they had no fans in the stadium on such a historic night, but that did not stop plenty of them braving torrential rain to welcome the team to the stadium.
Hundreds lined the street on the approach to the ground and blue flares were lit as the coaches carrying the players made the short journey from the nearby training complex.
With a large police presence there were no obvious signs of trouble but little social distancing was evident.
The Manchester weather also had a surprise in store as the downpour not only continued but turned from rain to hailstones. There was no danger of the game being called off but groundstaff hurriedly had to clear ice from the line markings.
The pitch was a wintry sight but City will have been warmed by the news Kylian Mbappe was only deemed fit enough for a place on the PSG bench due to a calf injury.
That did not prevent PSG making a positive start. Neymar and Di Maria both had early shots blocked before they were wrongly awarded a penalty for handball against Oleksandr Zinchenko. Referee Bjorn Kuipers overturned his decision after replays showed the ball to have brushed the Ukrainian’s shoulder.
After surviving that scare, City took a firm grip on the tie as they broke clear to score after 11 minutes.
Ederson released Zinchenko with a superb ball and the left-back picked out the inrushing Kevin De Bruyne outside the box. The Belgian’s shot was blocked but Mahrez followed up to tuck home the rebound.
PSG did not let their heads drop and turned up the heat with Marquinhos heading against the bar. Di Maria then missed an open goal from 25 yards after Bernardo Silva was dispossessed while Ederson was out of his goal.
Both sides continued to attack in what became a tetchy affair.
John Stones blocked a Neymar shot while Mahrez was denied from close range by Keylor Navas.
Phil Foden forced Navas to save twice more early in the second half although he was flagged offside for one of them.
Neymar burst into the area but Zinchenko produced a fine sliding challenge to deny the Brazilian and Ruben Dias blocked a volley from Ander Herrera.
City snatched another vital goal as they caught PSG on the counter-attack after 63 minutes. Foden exchanged passes with De Bruyne and sent a low ball into the area for Mahrez to tuck in at the far post.
That proved a hammer blow for PSG, who then lost their cool. Di Maria became the second of their players to be sent off in the tie after clashing with Fernandinho.
PSG became niggly, rash in their challenges and could not muster much further threat as Kuipers issued a flurry of yellow cards. It was City who had the best of the remaining chances as they closed out the game for a famous win.