【问题标题】:Nant failing with bad permissions on build serverNant 在构建服务器上因权限错误而失败
【发布时间】:2011-04-12 17:36:03
【问题描述】:

总的新手问题。我正在尝试在构建服务器上运行 Nant 脚本(非常基本的脚本,不做任何事情),但由于错误而失败

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

我应该怎么做才能让它运行?

【问题讨论】:

  • 提供更多细节:你使用什么构建服务器?你的 Nant 脚本在做什么?可能粘贴示例代码。
  • 看来这个问题解决了同样的问题:stackoverflow.com/questions/8605122/…希望有帮助!

标签: build-process nant


【解决方案1】:

我的错误信息提到了“Internet 区域”。这可能是因为我从 SourceForge 下载了压缩的二进制文件。我先拉上拉链然后再解开以剥离该区域,这对我来说非常有用。

在 Windows 7(或类似系统)上:

  1. 选择 NAnt 文件夹中的所有文件
  2. 右键单击,发送到 > 压缩(压缩)文件夹
  3. 右键单击新的 zip 文件并选择“全部提取...”
  4. 解压到新文件夹

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

【讨论】:

  • 这正是我的问题!谢谢!
【解决方案2】:

我相信@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)
程序集的区域 失败是:Internet
失败的程序集的 Url 是: file:///C:/Program Files (x86)/NAntBuilder 2/nantcontrib/bin/NAnt.Contrib.Tasks.dll

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

【讨论】:

    【解决方案3】:

    此问题是由 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 *.*"

    【讨论】:

    • 我在 NAnt 目录中执行此操作无济于事,然后在 NH 源目录中执行此操作并开始构建。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      Using CasPol to Fully Trust a Share

      此链接可能对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 2019-08-08
        • 1970-01-01
        • 2018-10-28
        • 2019-06-25
        • 1970-01-01
        相关资源
        最近更新 更多