어셈블리를 검색하고 양식 인 클래스를 확인한 다음 해당 멤버를 확인하는 응용 프로그램을 실험 해 왔습니다.양식의 인스턴스를 생성 할 때 반사 오류가 발생했습니다.
내가 어셈블리를 조회하기 위해 사용하고있는 코드는 다음과 같습니다
코드가Activator.CreateInstance(formType)
을 것을 시도
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace TestForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
내 문제입니다 : 내가 표준 양식을 조회하려면이 옵션을 사용하고
Assembly testAssembly = Assembly.LoadFile(assemblyPath);
Type[] types = testAssembly.GetTypes();
textBox1.Text = "";
foreach (Type type in types)
{
if (type.Name.StartsWith("Form"))
{
textBox1.Text += type.Name + Environment.NewLine;
Type formType = testAssembly.GetType();
Object form = Activator.CreateInstance(formType);
}
}
"No parameterless constructor defined for this object."
또한 'DeclaringMethod :'formType.DeclaringMethod '가'System.InvalidOperationException '유형의 예외를 던졌습니다'formType 확인 '에서 볼 수 있습니다.
양식에 표준 생성자가 있기 때문에 오류 메시지를 이해하지 못합니다. 정말 명확한 것이 누락 되었습니까?
편집 : type.Name
은 코드가 Form1
인 것으로 인스턴스화하려고 시도하는 유형을 표시합니다.
오류가있는 유형이며 다른 형식이 아닙니다. 전자 이름은'Form'으로 시작합니까? –
type.Name.StartsWith ("Form") -이 형식이 양식인지 여부를 확인하는 최선의 방법이 아닙니다. – username
@JonSkeet - 다른 형식이 될 수 있는지, 표준 Windows Form 프로젝트를 쿼리하고있는 어셈블리인지 잘 모르겠습니다. VS2010에서 생성되었습니다. – GrandMasterFlush