System.UnauthorizedAccessException的
我们有两个问题,我们认为这可能与NDependAPI有关
首先,我们正在编写程序的IIS工作进程使用NDepend API,在第一次请求命中时运行在4Gb +内存上,每接下来的请求就会增加约100-400mb。
其次,第一个请求之后的任何请求都会导致产生大量System.UnauthorizedAccessExceptions
到文件,这些文件的名称类似于CQLinqAsm_[GUID].dll
看着C: WINDOWS TEMP ,有一堆文件,比如wz1p0cca.out
或ws1ju0z0.err
等。 打开文件,他们也引用了一些.cs文件,但他们无处可见。
跳到结论,但从表面上看,这感觉好像有些东西没有妥善处理,并且锁定了这些文件。 这可能会占用大量的内存空间以及除第一个请求之外的任何异常。
但是,看看NDepend API文档,我看不到任何实现IDisposable
东西,这表明可能并非如此。
重现错误并不困难,但是是一个漫长的过程,所以我将尝试描述我们如何使用MVC / NDepend API的流程。
在创建MVC项目之后,引用NDepend API并加载它(注意这里描述的步骤),我们通过AJAX请求向WebAPI控制器请求结果。
这个控制器然后发送一个请求到一个服务类,然后把它发送到我们的NDepend包装库。
在我们的包装库中,流程与入门程序非常相似,不同之处在于我们直接从NDepend proj文件加载规则:
- >加载项目,并附加覆盖文件(覆盖范围通过我们的团队城市自动完成)
- >通过调用IAnalysisResultRef.Load()
或运行IProject.RunAnalysis()
获取分析结果( IAnalysisResults
IProject.RunAnalysis()
。
- >编译查询(由NDepend.Helpers.IEnumerable<string>.CompileMany()
)
- >计算JustMyCode(由IProject.CodeQueries.CodeQueriesSet.ComputerJustMyCode()
)
- >运行查询(通过IQueryCompiled.IQueryCompiledSuccess.Execute()
)
- >返回结果在页面上呈现
在第一次运行时一切正常,但是,如果我们刷新页面,只要它到达NDepend.Helpers.IEnumerable<string>.CompileMany()
,它就开始生成System.UnauthorizedAccessExceptions。
我们可能会很糟糕,但任何有见识的人都会是天赐之物。
链接地址: http://www.djcxy.com/p/37713.html上一篇: System.UnauthorizedAccessException
下一篇: NDepend TypeInitializationExceptions when Testing with NUnit