如何使用Nant 0.91解决配置错误?

时间:2011-12-22 14:13:56

标签: windows-7 build log4net nant

下载Nant 0.91后,我遇到了一些与配置或安全相关的相当神秘的配置错误(见下文)。

我正在尝试简单地将我的Nant可执行文件从0.86升级到0.91。

在Windows 7计算机上构建时,如何解决以下问题?

  

log4net:ERROR XmlConfiguratorAttribute:获取ConfigurationFileLocation的异常。必须能够在未设置ConfigFile和ConfigFileExtension属性时解析ConfigurationFileLocation。   System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。      在System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark& stackMark,Boolean isPermSet)      在System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission上限,StackCrawlMark& stackMark)      在System.Security.CodeAccessPermission.Demand()      在System.AppDomainSetup.VerifyDir(String dir,Boolean normalize)      at log4net.Util.SystemInfo.get_ConfigurationFileLocation()      at log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(Assembly sourceAssembly,ILoggerRepository targetRepository)

     

失败的行动是:   需求   失败的第一个权限的类型是:   System.Security.Permissions.FileIOPermission   失败的程序集区域是:   网络

     

未处理的异常:System.Security.SecurityException:尝试访问配置节'nant'时,ConfigurationPermission请求失败。要允许所有调用者访问此部分的数据,请在声明此部分的配置文件中将section属性'requirePermission'设置为等于'false'。 ---> System.Security.SecurityException:对类型'System.Configuration.ConfigurationPermission,System.Configuration,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的权限的请求失败。      在System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark& stackMark,Boolean isPermSet)      在System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission上限,StackCrawlMark& stackMark)      在System.Security.CodeAccessPermission.Demand()      在System.Configuration.BaseConfigurationRecord.CheckPermissionAllowed(String configKey,Boolean requirePermission,Boolean isTrustedWithoutAptca)      ---内部异常堆栈跟踪结束---      在System.Configuration.BaseConfigurationRecord.CheckPermissionAllowed(String configKey,Boolean requirePermission,Boolean isTrustedWithoutAptca)      at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey,Boolean getLkg,Boolean checkPermission,Boolean getRuntimeObject,Boolean requestIsHere,Object& result,Object& resultRuntimeObject)      在System.Configuration.BaseConfigurationRecord.GetSection(String configKey)      在System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)      在System.Configuration.ConfigurationManager.GetSection(String sectionName)      在NAnt.Console.ConsoleStub.Framework.GetRuntimeFramework()      在NAnt.Console.ConsoleStub.Main(String [] args

(答案即将发布,张贴作为参考问题....)

4 个答案:

答案 0 :(得分:202)

奇怪的是,这与从Nant 0.91档案中提取可执行文件的方式有关。 (这对我来说没有任何意义,直到我真正尝试过它,但它确实有效......)

来源:http://surfjungle.blogspot.com/2011/11/tip-running-nant-091-on-windows-7.html

  

我发现问题与Windows 7安全相关,因为下载的NAnt 0.91 zip文件需要执行额外的安全相关配置:在解压之前,必须右键单击zip文件,选择属性并在单击常规选项卡,单击标记为取消阻止的按钮,然后单击属性窗口上的确定。现在,将文件解压缩到所需的位置,确保它在系统路径上,打开一个新的命令行,NAnt应该成功运行。

答案 1 :(得分:11)

我遇到了同样的问题,但我的“属性”/“常规”标签中没有包含取消阻止按钮。 (我不确定为什么;似乎这可能与我在VMWare Fusion虚拟机中运行的事实有关。)

如果我使用Windows内置ZIP提取器之外的东西来提取文件,这个问题似乎就消失了。例如,我使用7-Zip来提取存档,一切正常。

答案 2 :(得分:1)

这是在使用powershell事实后递归解除所有文件的方法。奇怪的是,unblock-file只检查管道上的pspath属性。

get-childitem -recurse c:\nant-92 | 
get-item -stream zone.identifier -erroraction silentlycontinue | 
foreach { $_.pspath = $_.pspath -replace ':zone.identifier'; $_ } | 
unblock-file

您当然可以这样做,而无需知道哪个被阻止了

get-childitem -recurse c:\nant-92 | unblock-file

答案 3 :(得分:0)

这可能是由另一个问题引起的:在完成 NANT zip 文件的下载后,Windows 10 无论出于何种原因,都会自动启动一个 Windows 文件资源管理器窗口并钻入 ZIP 文件本身。

我没有注意到这一点,无意中直接将 zip 文件中的 文件夹移动到了我的目标位置。不是正确的提取,即使所有文件和目录都完好无损。这可能仍然是 Windows 处理压缩档案的方式的问题。我收到了与本文中记录的相同的安全错误。

通过下载最新的 NAnt 存档,然后使用 7-zip 正常解压缩,安全问题没有再次发生。