gpt4 book ai didi

c# - 如何将另一个项目(程序集)从我的解决方案添加到 CompilerParameters.ReferencedAssemblies 集?

转载 作者:行者123 更新时间:2023-11-30 19:11:05 24 4
gpt4 key购买 nike

假设我在主项目中编译了如下代码串。但是我想在 CustomClass 中实现一个接口(interface)。该接口(interface)位于我的解决方案中的另一个项目中(我的主要项目中的部分引用)当我这样做时

公共(public)类 CustomClass : InterfaceType

我收到这样的错误。我如何才能引用其他项目,以便在我的动态代码中使用该接口(interface)和属于它的其他类?

c:\Users\xxx\AppData\Local\Temp\m8ed4ow-.0.cs(1,32: error CS0246: 找不到类型或命名空间名称“InterfaceType”(您是否缺少使用指令或程序集引用?)

string code2 =
" public class CustomClass : InterfaceType " +
" {" +
" }";
// Compiler and CompilerParameters
CSharpCodeProvider codeProvider = new CSharpCodeProvider();

CompilerParameters compParameters = new CompilerParameters();
compParameters.GenerateInMemory = false; //default
//compParameters.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
compParameters.IncludeDebugInformation = true;
//compParameters.TempFiles.KeepFiles = true;
compParameters.ReferencedAssemblies.Add("System.dll");

CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");

// Compile the code
CompilerResults res = codeProvider.CompileAssemblyFromSource(compParameters, code2);

// Check the compiler results for errors
StringWriter sw = new StringWriter();
foreach (CompilerError ce in res.Errors)
{
if (ce.IsWarning) continue;
sw.WriteLine("{0}({1},{2}: error {3}: {4}", ce.FileName, ce.Line, ce.Column, ce.ErrorNumber, ce.ErrorText);
}

string error = sw.ToString();
sw.Close();

// Create a new instance of the class 'CustomClass'
object myClass = res.CompiledAssembly.CreateInstance("CustomClass");

最佳答案

底线是您需要将其他项目添加到您的 CompilerParameters.ReferencedAssemblies 集合中。这可能很棘手,因为 CodeDOM 需要能够访问程序集,因此程序集需要位于 GAC 中,或者您需要将程序集的完整路径添加到 ReferencedAssemblies 位置。

如果您在执行 CodeDOM 编译器的项目中引用包含“InterfaceType”的项目,一个简单的方法是执行如下操作:compilerParameters.ReferencedAssemblies.Add(typeof(InterfaceType ).Assembly.Location);.如果没有,您将不得不想出一些其他方法来确保 CodeDOM 可以找到您要引用的程序集。

关于c# - 如何将另一个项目(程序集)从我的解决方案添加到 CompilerParameters.ReferencedAssemblies 集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com