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

时间:2010-09-15 14:38:59

标签: build-process nant

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

  

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

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

5 个答案:

答案 0 :(得分:27)

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

在Windows 7(或类似)上:

  1. 选择NAnt文件夹中的所有文件
  2. 右键单击,发送至>压缩(压缩)文件夹
  3. 右键单击新的zip文件,然后选择“Extract All ...”
  4. 提取到新文件夹
  5. 提取的文件将不再来自“Internet区域”。如果您愿意,可以将其复制回原始目录。

答案 1 :(得分: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,   版本= 0.86.3319.0,Culture = neutral,PublicKeyToken = null方法   造成失败的原因是:NAnt.Core.Task   CreateChildTask(System.Xml.XmlNode)
程序集的区域   失败的是:互联网
失败的程序集的URL是:   file:/// C:/ Program Files(x86)/ NAntBuilder   2 / nantcontrib / bin中/ NAnt.Contrib.Tasks.dll

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

答案 2 :(得分:6)

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

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

例如,如果我在我的下载文件夹中的exe上运行streams.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 *.*"

答案 3 :(得分:1)

下载NAnt时,必须右键单击zip文件(在提取evertything之前),然后单击属性,然后单击取消阻止文件。然后提取所有内容,它将起作用。

答案 4 :(得分:0)

您是否在网络共享驱动器上运行Nant脚本?

如果是这样,那么您可能需要配置.NET Caspol策略以允许在网络共享上执行.NET代码。

Using CasPol to Fully Trust a Share

此链接可能可以为您提供帮助。