无法调用dll内部的方法
本文关键字:方法 内部 dll 调用 | 更新日期: 2023-09-27 18:23:58
我使用以下代码创建了动态dll
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)"必须声明主体,因为它没有标记为abstract、extern或partial
- "Test1"未实现接口成员"System.IDisposable.Dispose()"
因此,假设程序集已经创建,它肯定不会编译并包含该代码。
您应该尝试将代码重写为:
string testsource = @"
using System;
namespace Myclass.GetNames
{
public class Test1
{
public string GivemeNames(int No) { return ""Names: "" + No; }
}
}";
这将:
- 请改用
@"..."
语法,这样可以更容易地在几行中写入字符串,请注意其中使用了双引号 - 删除对
IDisposable
的支持,直到您准备好添加它为止(还记得添加Dispose
方法) - 请确保该方法返回一些内容