Alexandra Popp celebrates
After a quiet opening 40 minutes, Alexandra Popp put Germany ahead with a volley from Svenja Huth's cross from the right side of the penalty area for her fifth goal in five games.
However, their lead only lasted four minutes before Kadidiatou Diani broke free and shot from outside the penalty area, with her effort hitting the post and bouncing in off unfortunate goalkeeper Merle Frohms.
The Germany goalkeeper made three vital saves to keep it at 1-1 before Popp headed in her sixth goal of the tournament, taking her level with England's Beth Mead as joint leading scorer, for what proved to be the winner.
Sunday's final takes place at a sold out Wembley, which will have a capacity of 87,200, and the match could set a new attendance record for a match in a European Championship, either male or female.
England, looking to win the tournament for the first time, thrashed Sweden, the highest-ranked European side, 4-0 at Sheffield United's Bramall Lane on Tuesday.
There had been fears that the national rail strike, which saw a reduced service at Milton Keynes Central and with no trains after 18:30 BST, would severely affect the attendance at Stadium MK.
But that was not the case as a crowd of 27,445 - the ninth highest in the history of the tournament - produced a great atmosphere for the match between two of the top five ranked teams in the world.
However, both sides struggled to create chances in the opening 40 minutes, with Popp's 25-yard free-kick that was pushed wide by France goalkeeper Pauline Peyraud-Magnin the only notable effort.
That changed when Popp became the first player in the competition to ever score in five consecutive games, continuing a remarkable tournament for the Wolfsburg striker, who returned to action in March after 10 months out because of a serious knee injury.
Before that goal the crowd had produced a Mexican Wave, generally seen as a sign that things could be better on the pitch, but that Popp volley, in which she showed great technique, sparked the game into life.
Four minutes later Diani was instrumental in the equaliser as her shot struck the post, hit the back of Frohms and went into the net for the first goal Germany have conceded in their fifth match of the tournament.
But France, playing in their first European semi-final, had three chances in a three-minute spell midway through the second half as they pushed to take the lead.
First off, Diani did excellently to get to the byeline, and her pullback found substitute Selma Bacha, who spun and shot but saw it parried by Frohms.
Then from the resulting corner, France captain Wendie Renard nearly got her first goal of the tournament, rising superbly at the back post and heading at goal, only for Frohms to save it with her legs.
Frohms then saved again from Diani and for a rare moment in this tournament, Germany were looking vulnerable.
But, just when they needed inspiration, it came from captain Popp as she powered a header into the net from another Huth pass as her side retook the lead.
France, who also lost in the semi-finals of both the 2011 World Cup and 2012 London Olympics, pushed forwards in search of an equaliser that would have taken it to extra time.
But they could not level for a second time as Germany held on to set up a Wembley showdown with Sarina Wiegman's England on Sunday.
-- Courtesy of BBC Sport