无法在设计器中加载文件或程序集System.Componentmodel.Annotations 4.2.0.0

问题描述 投票:5回答:1

当我尝试在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。

enter image description here

我想知道我是否可以关闭通话的尝试

DataGridView.DataGridViewDataConnection.GetCollectionOfBoundDataGridViewColumns()

在设计时

仅单击忽略并继续似乎确实安全。

Team Explorer Changes表示这不会更改代码。

[更新]

如果我尝试将DataGridView控件复制并粘贴到其他表单,则会得到一条错误消息。处理此命令时发生错误。无法加载文件或程序集an error occurred

我能够从工具箱中添加一个新的DataGridView控件,但是当我尝试将绑定源附加到我得到的控件上时

Error setting value MyBindingSource to property DataSource

Error setting value

[更新]

我发现绑定源的项目数据源已被删除。那就是当我单击绑定源的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

ProcMon capture

但是看不到任何失败消息。

我也尝试安装导致警告的版本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. 
c# winforms datagridview windows-forms-designer
1个回答
0
投票

尝试修复.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

第二个错误与第一个错误的根本原因相同,因此请首先诊断并解决根本原因,并避免对问题的症状进行故障排除。

© www.soinside.com 2019 - 2024. All rights reserved.