如何解决配置错误与Nant 0.91



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

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

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

log4net:ERROR XmlConfiguratorAttribute: Exception getting ConfigurationFileLocation。必须能够在没有设置ConfigFile和ConfigFileExtension属性时解析ConfigurationFileLocation。System.Security.SecurityException:请求类型为"System.Security.Permissions"的权限。FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.日志含义在System.Security.CodeAccessSecurityEngine。检查对象需求,StackCrawlMark&stackMark, Boolean isPermSet在System.Security.CodeAccessSecurityEngine。检查(CodeAccessPermission上限,StackCrawlMark&stackMark)在System.Security.CodeAccessPermission.Demand ()在System.AppDomainSetup。VerifyDir(字符串dir,布尔规范化)在log4net.Util.SystemInfo.get_ConfigurationFileLocation ()在log4net.Config.XmlConfiguratorAttribute。ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetrerepository)

失败的操作是:需求第一个失败的权限类型是:System.Security.Permissions.FileIOPermission大会失败的区域是:互联网

未处理的异常:System.Security.SecurityException: Request for ConfigurationPermission failed while trying to access configuration section 'nant'。为了允许所有调用者访问该节的数据,在声明该节的配置文件中设置节属性'requirePermission'等于'false'。--> System.Security.SecurityException:请求类型"System.Configuration"的权限。ConfigurationPermission、系统。配置,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'失败。在System.Security.CodeAccessSecurityEngine。检查对象需求,StackCrawlMark&stackMark, Boolean isPermSet在System.Security.CodeAccessSecurityEngine。检查(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)在System.Configuration.BaseConfigurationRecord。GetSectionRecursive(字符串configKey,布尔getLkg,布尔checkPermission,布尔getRuntimeObject,布尔requestIsHere, Object&因此,Object&resultRuntimeObject)在System.Configuration.BaseConfigurationRecord。GetSection(字符串configKey)在System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem。GetSection(字符串sectionName)在System.Configuration.ConfigurationManager。GetSection(字符串sectionName)在NAnt.Console.ConsoleStub.Framework.GetRuntimeFramework ()在NAnt.Console.ConsoleStub。Main (String [] args

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

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

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

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

我有同样的问题,但是我的属性/常规选项卡不包含一个解锁按钮。(我不知道为什么;这似乎可能与我在VMWare Fusion虚拟机中运行有关。

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

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

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

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

下面是如何使用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

最新更新