Windows 7 如何解决Nant 0.91的配置错误?

Windows 7 如何解决Nant 0.91的配置错误?,windows-7,build,log4net,nant,Windows 7,Build,Log4net,Nant,下载Nant 0.91后,我发现了一些与配置或安全性相关的相当隐晦的配置错误(见下文) 我只是尝试将Nant可执行文件从0.86升级到0.91 在Windows 7计算机上构建时,如何解决以下问题 log4net:错误XmlConfiguratorAttribute:获取ConfigurationFileLocation时发生异常。当未设置ConfigFile和ConfigFileExtension属性时,必须能够解析ConfigurationFileLocation。 System.Secur

下载Nant 0.91后,我发现了一些与配置或安全性相关的相当隐晦的配置错误(见下文)

我只是尝试将Nant可执行文件从0.86升级到0.91

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

log4net:错误XmlConfiguratorAttribute:获取ConfigurationFileLocation时发生异常。当未设置ConfigFile和ConfigFileExtension属性时,必须能够解析ConfigurationFileLocation。 System.Security.SecurityException:请求“System.Security.Permissions.FileIOPermission,mscorlib,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败。 在System.Security.CodeAccessSecurityEngine.Check(对象请求、堆栈爬网标记和堆栈标记、布尔isPermSet) 在System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap、StackCrawlMark和stackMark) 在System.Security.CodeAccessPermission.Demand()中 在System.AppDomainSetup.VerifyDir(字符串目录,布尔规范化) 在log4net.Util.SystemInfo.get_ConfigurationFileLocation()中 在log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(程序集sourceAssembly,ILogger存储库targetRepository)中

失败的操作是: 需要 第一个失败的权限的类型是: System.Security.Permissions.FileIOPermission 失败的程序集区域为: 互联网

未处理的异常:System.Security.SecurityException:尝试访问配置节“nant”时,ConfigurationPermission请求失败。要允许所有调用者访问此节的数据,请在声明此节的配置文件中将节属性'requirecommission'设置为'false'。。-->System.Security.SecurityException:请求“System.Configuration.ConfigurationPermission,System.Configuration,Version=4.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”类型的权限失败。 在System.Security.CodeAccessSecurityEngine.Check(对象请求、堆栈爬网标记和堆栈标记、布尔isPermSet) 在System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap、StackCrawlMark和stackMark) 在System.Security.CodeAccessPermission.Demand()中 在System.Configuration.BaseConfigurationRecord.CheckPermissionAllowed处(字符串configKey,布尔值Requiremission,布尔值isTrustedWithoutAptca) ---内部异常堆栈跟踪的结束--- 在System.Configuration.BaseConfigurationRecord.CheckPermissionAllowed处(字符串configKey,布尔值Requiremission,布尔值isTrustedWithoutAptca) 位于System.Configuration.BaseConfigurationRecord.GetSectionRecursive(字符串configKey、布尔getLkg、布尔checkPermission、布尔getRuntimeObject、布尔RequestISHER、对象与结果、对象与结果EntimeObject) 位于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(字符串[]参数


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

奇怪的是,这与如何从Nant 0.91存档中提取可执行文件有关。(在我实际尝试之前,这对我来说毫无意义,但它确实有效…)

资料来源:

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


我也遇到了同样的问题,但是我的“属性/常规”选项卡没有包含“取消阻止”按钮。(我不知道为什么;这似乎与我在VMWare Fusion虚拟机中运行这一事实有潜在的关系。)


如果我使用Windows内置的ZIP提取器之外的其他工具来提取文件,这个问题似乎就消失了。例如,我使用7-ZIP来提取归档文件,一切都很好。

下面是如何在使用powershell之后递归解除阻止所有文件。奇怪的是,解除阻止文件只会通过管道检查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

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

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


通过新鲜下载NAnt存档文件,然后使用7-zip正常解压缩,安全问题不会再次出现。

另外,将下载的.zip文件保存到本地计算机,然后解除阻止,然后进行解压缩。我尝试了这一方法,同时该文件保存在网络共享上,Windows异常,好像没有解除锁定一样锁定。#ProTipIn case任何人都想知道这个解决方案也适用于Windows 10另一个(翻译)奇怪之处:在德语中,按钮的标签是
Zulassen
,这也适用于NAnt 0.92压缩存档。当然!但即使您主要使用7-Zip压缩,它也是