【问题标题】:CompileAssemblyFromDom throws access denied exceptionCompileAssemblyFromDom 抛出拒绝访问异常
【发布时间】:2013-05-24 20:44:58
【问题描述】:

代码:

using (var codeProvider = new CSharpCodeProvider())
{
    var compilerParameter = new CompilerParameters(
                _assemblies, assemblyName, false)
            {
                GenerateInMemory = true,
                CompilerOptions = "/optimize"
            };

    var compilerResults = codeProvider.CompileAssemblyFromDom(
                compilerParameter, templateResults.Select(r => r.GeneratedCode)
                .ToArray());
}

它抛出异常:CS1567 生成 Win32 资源时出错:访问被拒绝。

什么意思?

【问题讨论】:

  • 运行 procmon 并过滤错误,以便查看被拒绝的内容。
  • 知道了。 CreateFile C:\Windows\SysWOW64\inetsrv\CSCA77DD801384044AFAFB245A7DED3D4DB.TMP 访问被拒绝
  • 但是仍然不知道为什么它使用这个位置 C:\Windows\SysWOW64\inetsrv\ ?
  • 让它工作!详情见答案..

标签: c# .net compiler-construction compilation code-generation


【解决方案1】:

我得到这个工作。问题是 assemblyName 是文件名而不是路径,所以我更改了

assemblyName = Path.Combine(Path.GetTempPath(), assemblyName);

它开始工作了!

【讨论】:

    【解决方案2】:

    我遇到了同样的错误,但 AssemblyName 没有为我修复它。我能够通过使用 TempFiles 参数来修复它。此外,由于某种原因,它在临时路径本身中不起作用,只有在我在那里创建自己的子文件夹时才起作用。

    string tempPath = Path.GetTempPath() + "\\mysubfolder";
    Directory.CreateDirectory(tempPath);
    
    var parameters = new CompilerParameters(includeAssemblies.ToArray())
                    {                    
                        GenerateInMemory = true,
                        TempFiles = new TempFileCollection(tempPath)
                    };
    

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2012-10-19
      • 2012-09-11
      • 2015-05-26
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2011-04-02
      相关资源
      最近更新 更多