Нант с неудачными разрешениями на сервере сборки
Общий вопрос для новичков. Я пытаюсь запустить Nant script на сервере сборки (очень простой script, ничего не делать), и он не работает с ошибкой
System.Security.SecurityException: запрос на разрешение типа "System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089" не удалось.
Что делать, чтобы запустить его?
Ответы
Ответ 1
@TK имеет ответ здесь, я считаю, хотя это может быть не так просто, как работает nent с сетевого диска.
У меня была аналогичная проблема с @Aidan. Оказывается, я скопировал сборки nantcontrib (v.86) в мою систему сборки таким образом, что Windows 7 ограничила доступ к сборкам nantcontrib. Чтобы исправить это, я сначала скопировал zip файл nantcontrib в мою сборную VM, а затем переписал заблокированные сборки с содержимым .zip. Windows 7 увидела, что файлы поступают из локальной системы (а не из любого ненадежного источника, который я скопировал изначально), и он разблокировал сборки.
Вероятно, существует более прямое средство доверия к сборкам (например, ссылка @TK), но это сработало для меня.
Если вы снова видите эту ошибку, найдите две вещи:
Во-первых, Nant (v.91 alpha 2) делает приличную работу, точно сообщая, что такое ошибка. Я видел ту же ошибку, что и @Adian, вместе с полным стеком ошибок и, наконец, эту информацию (выделение мое):
Сбой сборки или AppDomain: NAnt.Contrib.Tasks, Версия = 0.86.3319.0, Культура = нейтральная, PublicKeyToken = null Метод что вызвало сбой: NAnt.Core.Task CreateChildTask (System.Xml.XmlNode)
Зона сборки, которая не удалось: Интернет
Url сборки, которая не удалось: file:///C:/Program Files (x86)/NAntBuilder 2/nantcontrib/бен/NAnt.Contrib.Tasks.dll
Во-вторых, посмотрите страницу свойств злоумышленника (в моем случае Nant.Contrib.Tasks.dll). Если файл был скопирован из ненадежного источника, вы увидите кнопку "Разблокировать" в разделе свойств (ниже Advanced...) вместе с запиской, в которой указано, что файлы были получены из ненадежного источника.
Ответ 2
В моем сообщении об ошибке упоминается "Интернет-зона". Вероятно, это связано с тем, что я загрузил zipped файлы из SourceForge. Я застегнул молнию, а затем расстегнул ее, чтобы снять зону, и это отлично подействовало на меня.
В Windows 7 (или аналогичном):
- Выберите все файлы в папке NAnt
- Щелкните правой кнопкой мыши, перейдите в папку > Сжатый (сжатый) файл
- Щелкните правой кнопкой мыши на новом zip файле и выберите "Извлечь все..."
- Извлечь в новую папку
Выбранные файлы больше не будут из "Интернет-зоны". Вы можете скопировать обратно в исходный каталог, если хотите.
Ответ 3
Эта проблема вызвана тем, что Windows установила метаданные файлов "Zone.Identifier"
в NTFS в "Интернет" (или в другую зону, которую вы должны явно разблокировать, чтобы получить доступ).
Чтобы не создавать метаданные безопасности файлов, которые должны быть записаны при копировании файлов или, в моем случае, разархивировать из zip файла на сетевом диске, либо скопировать zip файл в локальную папку, прежде чем разархивировать его, как было предложено ранее, или запустите инструмент "streams.exe" из Sysinternals, чтобы удалить эти метаданные.
Например, если я запускаю streams.exe
на exe в папке "Мои файлы":
streams.exe *.exe
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
C:\Downloads\jre-6u27-windows-x64.exe:
:Zone.Identifier:$DATA 26
Обычно streams.exe
не будет отображать информацию о метаданных, если все файлы были созданы из локальной папки. Если вы видите эти метаданные ":Zone.Identifier:$DATA"
(хранящиеся в NTFS как альтернативный поток данных), вы также должны увидеть кнопку "Разблокировать" в диалоговом окне "Свойства файла".
Чтобы разблокировать файлы массовыми, запустите "streams.exe -s -d *.*"
из вашей проблемной папки.
Ответ 4
Это сработало для меня: http://sourceforge.net/tracker/index.php?func=detail&aid=3415420&group_id=31650&atid=402868
Ответ 5
Запускаете ли вы Nant script на общий сетевой диск?
Если это так, вам может потребоваться настроить политику .NET Caspol, чтобы разрешить выполнение .NET-кода на сетевом ресурсе.
Использование CasPol для полного доверия Share
Эта ссылка может помочь вам.
Ответ 6
Когда вы загружаете NAnt, вам нужно щелкнуть правой кнопкой мыши по zip файлу (перед извлечением evertything), затем по свойствам и нажать на разблокировать файл. Затем извлеките все, и он будет работать.