【发布时间】:2014-12-25 07:09:20
【问题描述】:
我正在将项目 A 中的所有“表单名称”按照
C# Get form names of project A from Project B
我正在使用 @jerry 的回答。
当我的代码到达var f = (Form)emptyCtor.Invoke(new object[] { }); 行时,我收到异常已被调用错误的目标抛出。
下面是完整代码
try
{
Assembly projectA = Assembly.Load("ProjectA"); // replace with actual ProjectA name
// despite all Microsoft's dire warnings about loading from a simple name,
// you should be fine here as long as you don't have multiple versions of ProjectA
// floating around
foreach (Type t in projectA.GetTypes())
{
if (t.BaseType == typeof(Form))
{
var emptyCtor = t.GetConstructor(Type.EmptyTypes);
if (emptyCtor != null)
{
var f = (Form)emptyCtor.Invoke(new object[] { });
// t.FullName will help distinguish the unwanted entries and
// possibly later ignore them
string formItem = t.FullName + " // " + f.Text + " // " + f.Name;
checkedListBox1.Items.Add(formItem);
}
}
}
}
catch(Exception err)
{
// log exception
}
我被搜索错误原因但失败了。请建议我,我们已经穿了g
编辑:
以下是错误详情
图片 1
图片 2
【问题讨论】:
-
您是否收到
InnerException错误? -
InnerException 中有 StackTrace - 通过检查您可以更好地了解问题所在
-
@J0HN InnerException 堆栈跟踪表明异常是由
FrmMachineryType构造函数引发的。看来您还具有此程序集的调试信息(.pdbfiles),并且堆栈跟踪应包含引发异常的行号。如果您有权访问源代码,则可以检查导致错误的原因。可能表单构造函数试图访问一些未创建的静态对象。