仁宗嘉祐四年（1059年），举进士甲科，担任光禄丞。宋英宗时，召试学士院。宋神宗即位，为集贤校理。之后，兼史馆检讨，同知谏院。反对王安石用李定为御史，出任通判真州。历任提点河东刑狱、开封府推官、吏部郎中、右司郎中。宋哲宗元祐初年，进授起居郎、中书舍人、给事中、御史中丞，进献《君子无党论》。元祐三年（1088年）拜尚书右丞。次年，为刘安世、谏议大夫王觌等攻击弹劾，出知陈州。改知成都府，史称蜀人安居。召回朝中担任为礼部尚书、吏部尚书。绍圣元年（1094年）知定州，没有成行便去世，时年六十六岁，谥修简，赠左银青光