C# 无法在dll内调用方法
我已经用下面的代码创建了动态dllC# 无法在dll内调用方法,c#,dll,C#,Dll,我已经用下面的代码创建了动态dll var provider = new CSharpCodeProvider(); var options = new CompilerParameters { OutputAssembly = Path.Combine(Path.GetTempPath(), "MyTestDll.dll") }; string testsource = ""using System;" +
var 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时是否需要添加更多信息?程序集将不包含给定的类,因为该类无法编译 具体来说,以下是您在该字符串中获得的代码,已重新格式化,但仍与您的代码相同:
using System;
namespace Myclass.GetNames
{
public class Test1 : IDisposable
{
public string GivemeNames(int No);
}
}
尝试编译此代码时应出现以下错误:
- “Test1.GivemeNames(int)”必须声明一个主体,因为它没有标记为抽象、外部或部分
- “Test1”未实现接口成员“System.IDisposable.Dispose()”
string testsource = @"
using System;
namespace Myclass.GetNames
{
public class Test1
{
public string GivemeNames(int No) { return ""Names: "" + No; }
}
}";
这将:
@“…”
语法,这样可以更容易地在几行上写字符串,请注意其中双引号的用法IDisposable
支持,直到您准备添加它为止(记住还要添加Dispose
方法)GivenNames来自哪个方法/库/类?这些代码是从您的程序复制的,还是您“简化”了它?我这样问是因为给定的代码(在那里的字符串中)是不合法的,所以它不会编译。具体来说,您既没有将
GivemeNames
抽象化,也没有给它一个方法体,这两者都是必需的。@JackM它不是来自任何库。我创建了这个方法,以便可以访问它。我做错了什么吗?您也没有实现Dispose
。我在库中看不到它,因为您的信息类和方法必须具有公共可访问性才能允许最大重用。您可以在该类中添加一些可行的示例代码吗?