Я получаю все «Им» из проекта A в B проекта согласно приведено вИсключение было выбрано целью вызова. В C#
C# Get form names of project A from Project B
и я использую @jerry «s ответ.
, когда мой код достиг 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
}
меня обыскали причину ошибки, но потерпел неудачу. пожалуйста, предложите мне, что мы я worng
EDIT:
ниже подробности об ошибках
Изображение 1
Изображение 2
Есть ли ошибки InnerException по ошибке? – dewaffled
Существует StackTrace в InnerException - вы могли бы лучше понять, что не так, изучив его – J0HN
@ J0HN Трассировка стека InnerException указывает, что исключение генерируется конструктором 'FrmMachineryType'. Кажется, у вас также есть информация об отладке (файлы '.pdb') для этой сборки, а трассировка стека должна содержать номер строки, которая генерирует исключение. Если у вас есть доступ к исходному коду, вы можете проверить, что вызывает ошибку. Вероятно, конструктор форм пытается получить доступ к некоторому статическому объекту, который не был создан. – dewaffled