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(或类似)上:
提取的文件将不再来自"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).如果文件是从不受信任的来源复制的,您将在属性部分(高级...下方)看到"取消阻止"按钮以及一条说明文件来自不受信任来源的注释.
此问题是由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 *.*"从有问题的文件夹中运行.