Nant在构建服务器上的权限失败

Aid*_*dan 17 nant build-process

总新手问题.我试图在构建服务器上运行Nant脚本(非常基本的脚本,没有做任何事情),并且它失败并出现错误

System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败.

我该怎么办才能让它运转起来?

Dan*_*nNZ 27

我的错误消息提到了"Internet区域".这可能是因为我从SourceForge下载了压缩二进制文件.我拉链然后拉开拉链以去除区域,这对我很有用.

在Windows 7(或类似)上:

  1. 选择NAnt文件夹中的所有文件
  2. 右键单击,发送到>压缩(zipped)文件夹
  3. 右键单击新的zip文件,然后选择"Extract All ..."
  4. 提取到新文件夹

提取的文件将不再来自"Internet区域".如果您愿意,可以将其复制回原始目录.


小智 16

我相信@TK在这里有答案,尽管它可能不像nant是否从网络驱动器运行那么简单.

我和@Aidan有类似的问题.事实证明,我已经将nantcontrib(v .86)程序集复制到我的构建系统,使得Windows 7限制了对nantcontrib程序集的访问.为了解决这个问题,我首先将nantcontrib zip文件复制到我的构建VM,然后用.zip的内容覆盖阻塞的程序集.Windows 7发现这些文件来自本地系统(而不是来自我最初复制的任何不受信任的来源)并且它取消阻止了程序集.

可能有更直接的方式来信任程序集(例如@ TK的链接),但这对我有用.

如果再次看到此错误,请查找以下两项内容:

首先,Nant(v.91 alpha 2)做了一个不错的工作,准确报告错误是什么.我看到了与@Adian相同的错误,以及一个完整的错误堆栈,最后这个信息(强调我的):

失败的程序集或AppDomain是:NAnt.Contrib.Tasks,Version = 0.86.3319.0,Culture = neutral,PublicKeyToken = null导致失败的方法是:NAnt.Core.Task CreateChildTask(System.Xml.XmlNode)
The Zone失败的程序集是:Internet失败的程序集
的Url是:file:/// C:/ Program Files(x86)/ NAntBuilder 2/nantcontrib/bin/NAnt.Contrib.Tasks.dll

其次,查看有问题的程序集的属性页面(在我的例子中,是Nant.Contrib.Tasks.dll).如果文件是从不受信任的来源复制的,您将在属性部分(高级...下方)看到"取消阻止"按钮以及一条说明文件来自不受信任来源的注释.


Erh*_*ung 6

此问题是由Windows将"Zone.Identifier"NTFS中的文件元数据设置为"Internet"(或您必须明确取消阻止以获取访问权限的另一个区域)引起的.

要在复制文件时不要写入文件安全元数据,或者在我的情况下,从网络驱动器上的zip文件解压缩,请将zip文件复制到本地文件夹,然后再解压缩,如前所述,或运行"来自Sysinternals的streams.exe"工具删除该元数据.

例如,如果我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
Run Code Online (Sandbox Code Playgroud)

通常,streams.exe如果文件都源自本地文件夹,则不会显示任何元数据信息.如果您确实看到这些":Zone.Identifier:$DATA"元数据(存储在NTFS中作为备用数据流),那么您还应该在文件的"属性"对话框中看到"取消阻止"按钮.

要批量解锁文件,请"streams.exe -s -d *.*"从有问题的文件夹中运行.