我创建了一个函数来编译内存中字符串中的C#代码并在运行时使用它。它运作得很好。
接下来,我创建了一个小类库(让我们称之为mynew.dll)并将其放在c:\ mylibraries \ mynew.dll。
在我的代码中,我可以添加引用的程序集。我是这样做的:
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters
{
GenerateExecutable = false,
GenerateInMemory = true
};
parameters.ReferencedAssemblies.Add(@"c:\mylibraries\mynew.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, mycode);
现在,我的C#代码字符串(mycode)是一个名为" Execute"的函数。当我在此函数中从mynew.dll声明命名空间和类时,我收到此错误:
无法加载文件或程序集' MyNew,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = null'或其中一个依赖项。该 系统找不到指定的文件。
当我在主应用程序的bin / debug文件夹中复制dll时突然有效,但我不想要这个。我希望在运行时编译的代码能够使用它,而不是主应用程序。
这是我在发布之前做的:
有没有办法解决这个问题?
答案 0 :(得分:-1)
使用Directory.GetFiles在文件系统中查找程序集,使用System.Reflection.Assembly.LoadFile加载程序集,然后找到所需的类型。使用将由具体类实现的接口,以避免必须知道具体类型。
此主题应该有所帮助:Finding objects that implement interface from loaded assembly -how to compare types?