Ошибка компиляции CS0016: не удалось записать в выходной файл
Краткая информация
Когда я пытаюсь просмотреть мой сайт, я получаю следующее сообщение об ошибке:
CS0016: Не удалось записать в выходной файл 'c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Временные файлы ASP.NET\www\xxx\yyy\zzz\abdll' - 'Имя каталога недействительный
Подробно
У меня есть два веб-сайта на моем ПК разработки (фиктивные имена):
- Web2 - это написано в ASP.NET с использованием .NET 3.5 и работает в AppPool, который обращается к платформе v2.0.NET и работает в интегрированном режиме. Это разработано с использованием Visual Studio 2010
- Web4 - это написано в ASP.NET с использованием .NET 4.5 и работает в AppPool, который обращается к платформе v4.0.NET и работает в интегрированном режиме. Это разработано с использованием Visual Studio 2012.
В последнее время я почти постоянно работаю в VS2012 на Web4, и он отлично работает, однако на днях я попытался запустить Web2 и получил вышеописанное исключение.
Необычно, часть пути (которую я заменил выше буквами "zzz" ), кажется, указывает на путь немецкого языка, так как он "\ de-DE \" - я не работаю на немецком языке, не знаю, откуда она взяла эту идею.
Одна вещь, которая почти наверняка не связана, но по какой-то неизвестной причине я считаю важным отметить: я использовал инструмент Performance Analysis в Visual Studio 2012 за день до появления этой проблемы, и я не знаю, это могло бы внести некоторые изменения в мой компьютер...??
Попытка исправления
В Интернете существует довольно много тем, касающихся этого; некоторые потоки заканчиваются успехом, когда права доступа к файлам были изменены, в то время как другие заканчивают несколько отчаянную звуковую заметку... Я прошел процесс сравнения разрешений NTFS во всех соответствующих звуковых каталогах на моем ПК с данными о коллегах, чьи машина все еще работает. К сожалению, радости не было.
Я также отключил asp.net 2.0 и снова установил его, используя:
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -u
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -ir
и снова, радости не было и там.
Мой Web4 продолжает работать без изменений.
Также FYI: использование IIS 7.5 на Win7 x64.
Теперь я обращаюсь к этой более широкой аудитории в надежде превратить мое нынешнее состояние отчаяния в успех.
Спасибо всем
Griff
Ответы
Ответ 1
Ответ был найден с помощью ProcMon:
http://technet.microsoft.com/en-us/sysinternals/bb896645
Временные файлы asp.net сначала создаются в папке временного пользователя пользователя, а затем перемещаются в эту папку. По какой-то еще неизвестной причине компиляция для моего сайта Web2 (.NET 2 AppPool) теперь использует те же папки, что и мой сайт Web4 (.NET 4 AppPool).
Я использовал ProcMon для идентификации всех результатов для "отказа в доступе" и дал разрешения на запись группы IIS_IUSRS (и в одном случае - C:\Users\ASP.NET V4.0 Integrated - изменить разрешения).
Я понятия не имею, почему компиляция использует "неправильные" папки, и я подозреваю, что в некоторых случаях у меня могут быть повышенные права доступа, но пока она работает.
Ответ 2
В диспетчере IIS в дополнительных настройках пула приложений убедитесь, что для параметра "Модель процесса" > "Загрузить профиль пользователя" установлено значение "Истина".
У меня была такая же проблема. Я попытался изменить разрешения, отключить антивирус, создать новый пул приложений и переустановить .NET. Я даже создал новый сайт с только страницей "Default.aspx" и попытался просмотреть этот сайт. Даже на этом сайте произошла ошибка компиляции. Наконец, я заметил, что у моих пулов приложений (чистый тестовый сайт и основной сайт) значение "False" для параметра "Загрузка пользовательского профиля" не было установлено по умолчанию. Я вернул это к истине, и проблема исчезла.
Ответ 3
В случае, если вышеприведенные ответы не исправили его для вас, проверьте переменные среды (щелкните правой кнопкой мыши "Компьютер" → "Свойства" → "Расширенные параметры системы" → вкладка "Дополнительно" → "переменные среды"
Убедитесь, что временные переменные указывают на папку со всеми необходимыми разрешениями. (полный доступ для Network Service, IIS_IUSRS)
Примечание. Не проверяйте только две переменные наверху, загляните в меню прокрутки в разделе Системные переменные. Вы также можете найти здесь переменные.
Ответ 4
Это не может быть причиной, но эта ошибка возникла для меня после попытки запуска мастера производительности VS 2010 с помощью метода Instrumentation.
Быстрое исправление в моей среде DEV: изменилось идентификатор пула приложений в LocalSystem.