CompileAssemblyFromDom抛出访问被拒绝异常

3
代码如下:
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 并过滤错误,以便您可以看到被拒绝的内容。 - SLaks
创建文件C:\Windows\SysWOW64\inetsrv\CSCA77DD801384044AFAFB245A7DED3D4DB.TMP访问被拒绝。 - Jekas
但仍然不知道为什么它使用此位置 C:\Windows\SysWOW64\inetsrv\? - Jekas
让它正常工作!请查看答案以获取详细信息。 - Jekas
2个回答

5
我已经搞定了。问题在于 assemblyName 是文件名而非路径,所以我进行了更改。
assemblyName = Path.Combine(Path.GetTempPath(), assemblyName);

然后它开始工作!


0

我遇到了同样的错误,但是使用AssemblyName并没有解决我的问题。我通过使用TempFiles参数来解决它。另外,由于某种原因,它在临时路径本身中不起作用,只有当我在其中创建自己的子文件夹时才能起作用。

string tempPath = Path.GetTempPath() + "\\mysubfolder";
Directory.CreateDirectory(tempPath);

var parameters = new CompilerParameters(includeAssemblies.ToArray())
                {                    
                    GenerateInMemory = true,
                    TempFiles = new TempFileCollection(tempPath)
                };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接