总新手问题。我试图在构建服务器上运行一个Nant脚本(非常基本的脚本,没有做任何事情),并且它失败并出现错误
System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。
我该怎么办才能让它运转?
答案 0 :(得分:27)
我的错误消息提到了“Internet区域”。这可能是因为我从SourceForge下载了压缩二进制文件。我拉上拉链然后拉开拉链以去除区域,这对我很有用。
在Windows 7(或类似)上:
提取的文件将不再来自“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
此链接可能可以为您提供帮助。