我使用下面的代码
创建了动态dllvar provider = new CSharpCodeProvider();
var options = new CompilerParameters
{
OutputAssembly = Path.Combine(Path.GetTempPath(), "MyTestDll.dll")
};
string testsource = ""using System;" +
"namespace Myclass.GetNames" +
"{" +
"public class Test1 : IDisposable" +
"{" +
"public string GivemeNames(int No);" +
"}" +
"}";";
provider.CompileAssemblyFromSource(options, new[] { testsource });
生成dll。但是当我在我的项目中添加这个dll时,我无法在该dll中引用GivemeNames方法。生成dll时是否需要添加更多信息?
答案 0 :(得分:1)
程序集不会包含给定的类,因为无法编译该类。
具体来说,这是您在该字符串中获得的代码,重新格式化,但仍与您的代码完全相同:
using System;
namespace Myclass.GetNames
{
public class Test1 : IDisposable
{
public string GivemeNames(int No);
}
}
尝试编译此代码时应该得到的错误是:
因此,假设程序集已创建,它肯定不会编译并包含该代码。
您应该尝试将代码重写为:
string testsource = @"
using System;
namespace Myclass.GetNames
{
public class Test1
{
public string GivemeNames(int No) { return ""Names: "" + No; }
}
}";
这将:
@"..."
语法,这样可以更轻松地在多行上编写字符串,请注意其中使用双引号。IDisposable
支持,直到您准备添加它为止(请记住同时添加Dispose
方法)