контекст
Я создаю расширение Visual Studio 2022 с проектом VSIX, который состоит из окна, которое отображает текущие классы формы (Winforms) вашего проекта в ComboBox, и когда вы выбираете его, он загружает все их элементы управления в списке, так что вы можете редактировать каждый Z-индекс (который определяет, что контроль подходит или на вершине других), так что вы можете редактировать, P./Preaky Mane. Pree. Pree. Pree. Pree. Pree. Pree. Pree. Pree. /> Чтобы сделать это, я подумал о том, чтобы «читать» сборку текущего проекта с отражением и извлекать классы формы.
Для Combobox я на самом деле просто идентифицирую классы формы по их расширению (.designer.cs), но для того, чтобы на самом деле загружать элементы управления каждого класса формы, я должен загружать его сборку, но я борюсь с тем, что он дает мне много зависимости. Это была 'System.windows.forms' и несколько других зависимостей, но я смог решить его, используя событие AssemblyResolve, добавив каждую необходимую сборку из структуры. 'System.Object' from Assembly 'System.private.corelib', потому что родитель не существует. Это первый раз, когда я делаю расширение Visual Studio и использую подобные сборки, поэтому я был бы очень благодарен, если бы кто -то мог мне помочь, заранее! Formcombobox_selectionChanged событие, которое выглядит следующим образом:
private void FormsComboBox_SelectionChanged(object sender, RoutedEventArgs e)
{
string file = "";
try
{
// Reflection Aproach - Loads all the requested assemblies
AppDomain.CurrentDomain.AssemblyResolve += Resolver;
// Dinamicly Load Project's Assembly
Assembly assembly = Assembly.LoadFrom(Path.Combine(Path.GetDirectoryName(clientProject.FullName), "bin\\Debug\\net8.0-windows\\" + clientProject.Properties.Item("OutputFilename").Value.ToString()));
// Get the assembly name (with namespaces)
file = files.Where(s => s.Contains(FormsComboBox.SelectedItem.ToString())).First();
// Get the Type from the assembly (HERE IS WHERE THE ERROR POPS UP)
Type formType = assembly.GetType(GetAssemblyName(file), true, true);
// Create an object of the Type
object formClass = Activator.CreateInstance(formType);
// Fill the ListView with the project's Form Class Controls
controls.Clear();
if (formClass is System.Windows.Forms.Form form)
{
foreach (System.Windows.Forms.Control control in form.Controls)
{
controls.Add(control);
}
}
ControlListView.Items.Clear();
for (int i = 0; i < controls.Count; i++)
{
ControlListView.Items.Add("(" + controls.GetType().Name + ") " + controls.Name);
}
} catch (Exception ex) {
MessageBox.Show(ex.Message + ex.StackTrace);
}
}
< /code>
Кроме того, по какой -то причине, иногда это происходит в следующей строке, где он пытается создать создание объекта.
Вы также можете просто добавить комментарий, и я постараюсь ответить, как только смогу. < /p>
Подробнее здесь: https://stackoverflow.com/questions/795 ... relib-beca
«Не удалось загрузить тип» System.Object 'из сборки «System.private.corelib», потому что родитель не существует »исключе ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
C# .NET Core Как отладить System.IO.FileNotFoundException в System.Private.CoreLib.dll?
Anonymous » » в форуме C# - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Исключение типа «System.InvalidOperationException» произошло в System.Private.CoreLib.dll.
Anonymous » » в форуме C# - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Исключение типа «System.InvalidOperationException» произошло в System.Private.CoreLib.dll.
Anonymous » » в форуме C# - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-