Я получаю эту ошибку, когда пытаюсь открыть форму в моей c#. NET библиотеке классов Framework 4.7.2. Проверено автоматическое создание перенаправления привязки
Стек вызовов:
at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)
at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeType type, RuntimeType caType, Boolean inherit)
at System.RuntimeType.GetCustomAttributes(Type attributeType, Boolean inherit)
at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectGetAttributes(Type type)
at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetAttributes()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetAttributes()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetAttributes()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetAttributes()
at System.ComponentModel.TypeDescriptor.GetAttributes(Type componentType)
at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetConverter(Object instance)
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetConverter()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetConverter()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetConverter()
at System.ComponentModel.TypeDescriptor.GetConverter(Type type)
at System.ComponentModel.PropertyDescriptor.get_Converter()
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetCollectionOfBoundDataGridViewColumns()
at System.Windows.Forms.DataGridView.RefreshColumns()
at System.Windows.Forms.DataGridView.RefreshColumnsAndRows()
at System.Windows.Forms.DataGridView.OnBindingContextChanged(EventArgs e)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.ControlCollection.Add(Control value)
at System.Windows.Forms.Form.ControlCollection.Add(Control value)
at System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)
Я посмотрел этот вопрос и попытался добавить следующее в app.config файла .exe но это не помогло
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.2.0.0" newVersion="4.7.0.0" />
</dependentAssembly>
Фактическая форма находится в dll, поэтому я также попытался добавить ее в app.config dll
В моем файле проекта у меня есть
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
Я вижу, что 4.2.0 даже недоступен на Nuget.
Интересно, могу ли я отключить попытку вызовите
DataGridView.DataGridViewDataConnection.GetCollectionOfBoundDataGridViewColumns()
во время разработки
Кажется безопасным просто нажать «Игнорировать и продолжить».
Изменения в Team Explorer указывают, что это не меняет код.
[Обновление]
Если я попытаюсь скопировать и вставить элемент управления DataGridView в другую форму, я получаю сообщение об ошибке при обработке этой команды. Не удалось загрузить файл или сборку
Мне удалось добавить новый элемент управления DataGridView из панели инструментов, однако, когда я попытался прикрепить к нему источник привязки, я получил
Error setting value MyBindingSource to property DataSource
[Обновление]
Я обнаружил, что источник данных проекта для источника привязки был удален. То есть, когда я щелкнул стрелку вниз на свойстве источника привязки источника данных, источника данных не было в списке для выбора.
Оказалось, что я забыл включить свойства проекта DataSources в исходный элемент управления.
Однако, когда я добавляю новый DataGridView и пытаюсь установить выбор источника привязки, я все равно получаю сообщение об ошибке: не удалось загрузить файл или сборку
Источник привязки основан на объекте. Ошибка возникает для определенного объекта, а не для другого. Возможно, это свойство объекта вызывает проблему.
[Обновление]
Проблема возникает, когда связанный объект содержит свойство, которое также является объектом
public class BOMObj
{
// public FramePart FramePart { get; set; } // error occurs if I uncomment this
public string PartTypeName => $"{FramePart?.ComponentType}";
public string thing3 => "thing 3";
public string thing { get; set; }
public string thing2 { get; }
Я попытался создать экземпляр FramePart в конструкторе, но это не помогло
public BOMObj() {
FramePart = new FramePart();
}
Я полагаю, имеет смысл, что этот код не может работать во время разработки ... но почему сообщение об отсутствии файла? 1066 * [Обновление] Из-за этого вопроса я вполне уверен, что с моими перенаправлениями все в порядке. Обратите внимание, что проблема возникает только во время разработки.
[Обновление]
Поиск в Process Monitor для System.ComponentModel.Annotations
Но не было сообщений об ошибках.
Я также попытался установить версию 4.1.0, что привело к предупреждению
NU1605 Detected package downgrade: System.ComponentModel.Annotations from 4.7.0 to 4.1.0. Reference the package directly from the project to select a different version.