将对当前项目的引用添加到CSharpCodeProvider

时间:2016-07-24 14:39:10

标签: c# codedom

我正在尝试使用CodeDom编译一个字符串。

Dictionary<string, string> providerOptions = new Dictionary<string, string>
            {
                {"CompilerVersion", "v3.5"}
            };
        CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);

        CompilerParameters compilerParams = new CompilerParameters
        {
            GenerateInMemory = true,
            GenerateExecutable = false
        };

        compilerParams.ReferencedAssemblies.Add(Assembly.GetEntryAssembly().Location);

我的问题是:在我编译的代码中,我需要使用我正在创建代码的项目中的类。所以我尝试添加我当前的程序集作为参考,但是它给了我以下错误:

  

元数据文件'Path \ to \ my \ executable \ MyProject.exe'不能   打开 - '尝试加载程序不正确   格式“。

有人知道我的错误在哪里吗?

1 个答案:

答案 0 :(得分:0)

我有同样的需求,并且我通过以下方式解决了

library(plyr)
my_list = list(name1 = df1, 
               name2 = df2, 
               name3 = df3)

library(purrr)

iwalk(my_list, ~{
    tempdf = ddply (.x, c("week"),
     N = lenght (variable),
     mean = mean (variable),
     SD = sd (variable),
     SE = sd/ sqrt(N))

    tempname = paste ("Curated_", .y, ".csv", sep = "")
    write.csv (tempdf, tempname, na="")
})

compilerParams.ReferencedAssemblies.AddRange(Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(a => a.Name + ".dll").ToArray()); 和我一起工作。 如果需要获取Assembly文件的完整路径,则需要将它们加载到新的AppDomain中,然后获取每个文件中的+".dll"