AnkhSVN ломает разрешения на совместное использование ASP.NET с SVN 1.7 - PullRequest
5 голосов
/ 23 января 2012

Фон (перейдите к нижней части, если вам нужен вопрос)

Недавно я обновил репозиторий SVN (размещенный на ассембле) до SVN 1.7.После этого мы стали периодически сталкиваться с множеством File Access Denied ошибок на страницах сайта ASP.NET, которые находятся в локальной рабочей копии репозитория.

Некоторые папки также начали получать странные разрешения для файлов (онистал помечен только для чтения), и с них удален пользовательский доступ.Эти проблемы могут начаться только после цикла обновления / фиксации через плагин AnkhSVN для Visual Studio, но не всегда;он казался очень темпераментным.

Единственное временное исправление, которое мы до сих пор обнаружили, - это зафиксировать все оставшиеся изменения, удалить локальную копию и повторно получить полную рабочую копию (с TortoiseSVN).Однако это нереальное исправление, и оно серьезно влияет на производительность.

Этот сайт представляет собой ASP.NET WebWorkerRole на основе Azure.До обновления SVN 1.7 проблем не возникало.Я попытался поиграться с внутренними разрешениями IIS, чтобы обойти эту проблему, однако, без кубиков.

Мое окружение

  • Visual Studio 2010 Ultimate 10.0.40219.1 SP1
  • AnkhSVN 2.3.10509 (последняя версия, поддерживает SVN 1.7.1)
  • TortoiseSVN 1.7.1, сборка 22161 - 64-битная
  • Запуск в режиме отладки через эмулятор Azureenvironment

Вопрос

Возможно ли для SVN 1.7 или любого другого инструмента в моей среде нарушить права доступа к файлам, чтобы файлы стали непригодными для использования вСайт ASP.NET?и что еще более важно, как я могу это исправить?


Точная ошибка разрешения доступа к файлу:

Доступ к пути '// file //' isотказано.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.UnauthorizedAccessException: Доступ к пути '// file //' запрещен.

ASP.NET не авторизован для доступа к запрошенному ресурсу.Рассмотрите возможность предоставления прав доступа к ресурсу для удостоверения запроса ASP.NET.ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET в IIS 5 или Network Service в IIS 6 и IIS 7 и настроенный идентификатор пула приложений в IIS 7.5), который используется, если приложение не олицетворяет собой.Если приложение выполняет олицетворение с помощью идентификатора, это будет анонимный пользователь (обычно IUSR_MACHINENAME) или пользователь с проверенным запросом.

Чтобы предоставить ASP.NET доступ к файлу, щелкните файл в проводнике правой кнопкой мыши и выберитеСвойства »и выберите вкладку« Безопасность ».Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу.Выделите учетную запись ASP.NET и установите флажки для нужного доступа.

Но чистая рабочая копия не вызовет этой ошибки.Сравнивая разрешения двух, кажется, что рабочие копии, которые не содержат ошибок, являются общими (с IUSR и локальной учетной записью), в то время как у поврежденных нет общего доступа, но пользователь никогда не изменяет общий доступ.

Ответы [ 4 ]

16 голосов
/ 24 января 2012

Когда Subversion обновляет файл, он сначала создает временную версию в .svn / tmp /. Затем он перемещает файл в нужное место. (Чтобы избежать коррупции)

В 1.6 это было сделано для каждого каталога отдельно, но в 1.7 в каталоге верхнего уровня вашей рабочей копии есть только .svn.

Если каким-то образом ограничения файловой системы для этого каталога .svn ограничены, возможно, что ограничения будут скопированы с файлом при его перемещении на место. (Subversion не меняет сами разрешения в Windows)

3 голосов
/ 09 февраля 2012

Я решил эту проблему, открыв настройки безопасности для папки веб-сайта и выбрав «Дополнительно», а затем «Изменить разрешения» для пользователя IIS_IUSRS. Я установил флажок «Заменить все разрешения дочернего объекта наследуемыми разрешениями этого объекта» и нажал «Применить».

До этого я дал пользователю IIS полные права на скрытую папку tmp в корне извлечения, но я не знаю, поможет ли это в чем-либо.

Я не уверен, является ли это постоянным исправлением, но если это не так, вы можете по крайней мере использовать его для повторного применения разрешений для всех файлов в одной операции.

1 голос
/ 30 июля 2012

Я обнаружил, что точно такая же проблема произошла, когда я сделал 'Revert', используя:

  • Черепаха Свн 1.6.16
  • АнхСВН 2.3.11269.1348.
  • Visual Studio 2010 Professional
  • Windows 7 - 64 бит.

Я был совершенно озадачен, когда впервые столкнулся с ошибкой прав доступа и начал думать, что это мой код. После того, как я немного покопался, я удалил весь проект и заново загрузил его из Subversion, что решило проблему.

Когда эта проблема возникла снова, я посмотрел более внимательно на возвращенный файл и обнаружил, что разрешения для возвращенных файлов не совпадают с разрешениями других файлов. В частности, разрешения «Пользователи» для компьютера, на котором работает Visual Studio, вообще отсутствуют.

Так что я просто добавил это:

  • Щелкните правой кнопкой мыши файл проблемы. Это привело к появлению окна свойств файла.
  • Затем нажали «Изменить ...». Откроется окно с разрешениями.
  • Затем нажмите «Добавить» и появится окно «Выбор пользователей, компьютеров, учетных записей служб или групп».
  • Нажмите кнопку Типы объектов и отметьте все поля.
  • Нажмите кнопку Locations и убедитесь, что выбрано имя вашего компьютера.
  • Введите «пользователи» и нажмите кнопку «Проверить имена».
  • Нажмите OK на всех окнах, чтобы закрыть их.

Ваш веб-сайт должен теперь работать без ошибки разрешений.

1 голос
/ 20 июня 2012

Большая часть информации находится в папках .svn внутри каталога, в котором был извлечен проект. Так что на мой взгляд лучше использовать SVN отдельно от продвинутых инструментов интеграции. Также this имеет дело с решением проблемы как это.

...