下载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
(答案即将发布,张贴作为参考问题....)
答案 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 正常解压缩,安全问题没有再次发生。