Вероятно, это связано с проблемой с ACL, когда вы запускаете его на сервере Visual Studio WebDev, он запускается с вашей идентификацией, а если вы используете Visual Studio с повышенными правами (Vista +), то вы на самом деле можете работать от имени администратора. Когда вы запускаете его в IIS, он работает как удостоверение службы, обычно это Сетевая служба для IIS 6 и 7 или AppPool Identity для IIS 7 SP2 и IIS 7.5.
Одна вещь, которую я бы порекомендовал, - это добавить некоторую информацию о трассировке в код, который пытается записать файл, например, выполнить попытку / перехват, где исключение отправляется для трассировки, чтобы вы могли включить трассировку и определить, происходит ли исключение или нет.
Также убедитесь, что вы используете правильный физический путь, поскольку у вас также могут быть проблемы с относительными путями, поскольку IIS, вероятно, разрешит их в system32, если вы не используете Server.MapPath или что-то подобное.