当我尝试在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)
我查看了this question,并尝试将以下内容添加到.exe的app.config中,但没有帮助
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.2.0.0" newVersion="4.7.0.0" />
</dependentAssembly>
实际形式在dll中,所以我也尝试将其添加到dll的app.config中
在我的项目文件中,有
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
我发现Nuget上甚至没有4.2.0。
我想知道我是否可以关闭通话的尝试
DataGridView.DataGridViewDataConnection.GetCollectionOfBoundDataGridViewColumns()
在设计时
仅单击忽略并继续似乎确实安全。
Team Explorer Changes表示这不会更改代码。
[更新]
如果我尝试将DataGridView控件复制并粘贴到其他表单,则会得到一条错误消息。处理此命令时发生错误。无法加载文件或程序集
我能够从工具箱中添加一个新的DataGridView控件,但是当我尝试将绑定源附加到我得到的控件上时
Error setting value MyBindingSource to property DataSource
[更新]
我发现绑定源的项目数据源已被删除。那就是当我单击绑定源的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();
}
我想这段代码不能在设计时运行..但是为什么缺少文件消息呢?
[更新]由于this question,我非常有信心重定向可以正常进行。请注意,该问题仅在设计时发生。
[更新]
在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.
尝试修复.Net Framework,开始>运行> appwiz.cpl,然后选择.Net中的选项进行修复。
[接下来,第一条错误消息是“无法加载文件或程序集”。在哪里寻找此DLL?运行Process Monitor并检查Visual Studio在寻找它的路径。将DLL /程序集放到期望的位置,或者再次引用它。尝试回滚至4.1并使用该NuGet版本,或尝试使用更高版本的软件包(如4.4.1)。
Install-Package System.ComponentModel.Annotations -Version 4.1.0
所有这些发表评论的人会因版本而异:https://stackoverflow.com/a/44079161/495455
第二个错误与第一个错误的根本原因相同,因此请首先诊断并解决根本原因,并避免对问题的症状进行故障排除。