4

我一直在创建一个插件模型,其中将在服务器上编写代码,并创建一个 dll 输出并将其下载到客户端。

这很好用,但由于我们还希望对在服务器中生成的代码有调试支持,我尝试在客户端下载以下代码。

 public OutputResponse GetObject(string fileName, string sourceCode)
    {
        string[] assemblies = this.GetAssemblies();

        string codeLanguage = "cs";
        var dllFilePath = Path.Combine(Path.GetTempPath(), fileName + ".dll");
        var pdbFilePath = Path.Combine(Path.GetTempPath(), fileName + ".pdb");


        //Delete Existing file
        if (File.Exists(dllFilePath))
            File.Delete(dllFilePath);
        if (File.Exists(pdbFilePath))
            File.Delete(pdbFilePath);

        Dictionary<string, string> compilerInfo = new Dictionary<string, string>();
        compilerInfo.Add("CompilerVersion", "v4.0");

        CodeDomProvider provider = CodeDomProvider.CreateProvider(codeLanguage, compilerInfo);
        var compilerParameter = new CompilerParameters();
        compilerParameter.WarningLevel = 3;
        compilerParameter.GenerateExecutable = false;
        compilerParameter.GenerateInMemory = false;
        compilerParameter.IncludeDebugInformation = true;
        compilerParameter.CompilerOptions = "/debug:pdbonly";
        compilerParameter.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
        compilerParameter.TempFiles.KeepFiles = true;
        compilerParameter.OutputAssembly = dllFilePath;


        foreach (var assembly in assemblies)
            compilerParameter.ReferencedAssemblies.Add(assembly);


        var results = provider.CompileAssemblyFromSource(compilerParameter, sourceCode);

        string sourceFile = string.Empty;


        string pdbFile = Path.Combine(Path.GetDirectoryName(results.PathToAssembly), string.Concat(Path.GetFileNameWithoutExtension(results.PathToAssembly), ".pdb"));


        foreach(string file in results.TempFiles)
        {
            var extension = Path.GetExtension(file);
            switch(extension)
            {
                case ".cs":
                    sourceFile = file;
                    break;
            }
        }

        var response = new OutputResponse(results.PathToAssembly, pdbFile, sourceFile);

        return response;
    }

dll正确生成,我将pdb和源文件重命名为dll名称,并下载到客户端文件夹。

现在,当在插入 dll 的应用程序中调用方法时,Visual Studio 无法附加调试器。它说“在此文件夹中找不到匹配的符号文件”。

谁能帮我解决这个问题。

4

0 回答 0