我创建了一个函数来编译内存中的字符串中的 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 时,它突然起作用了,但我不想要这个。我希望在运行时编译的代码使用它,而不是主应用程序。
这是我在这里发布之前所做的:
- 搜索 Stackoverflow
- 使用谷歌
- 试图将 dll 编译到磁盘而不是内存中。这行得通...现在的问题是 dll 被锁定在 IIS 中,如果不重新启动 IIS 服务器就无法删除它;没有选择,因为代码可以随时更改,当人们在网站上时我不想重新启动服务器。
有没有办法来解决这个问题?