C# 无法加载文件或程序集';RevitApi';版本=19.0.0.0,

C# 无法加载文件或程序集';RevitApi';版本=19.0.0.0,,c#,visual-studio,winforms,user-controls,.net-assembly,C#,Visual Studio,Winforms,User Controls,.net Assembly,过去几周来,我一直在为程序“Revit”创建一个外接程序。一切都进行得很顺利,但突然,每当我尝试将我的DataGridView的DataSource设置为我的类getEntiteIndata,我都会得到错误: 使用下拉列表时出错:无法加载文件或程序集“RevitAPI,Version=19.0.0.0,Culture=neutral,PublicKeyToken=null”或其 依赖关系。系统找不到指定的文件 我没有更改文件位置或任何内容,所有类中都加载了.dll。另外,我在另一个DataGri

过去几周来,我一直在为程序“Revit”创建一个外接程序。一切都进行得很顺利,但突然,每当我尝试将我的
DataGridView
DataSource
设置为我的类
getEntiteIndata
,我都会得到错误:

使用下拉列表时出错:无法加载文件或程序集“RevitAPI,Version=19.0.0.0,Culture=neutral,PublicKeyToken=null”或其 依赖关系。系统找不到指定的文件

我没有更改文件位置或任何内容,所有类中都加载了
.dll
。另外,我在另一个
DataGridView
上使用了这个方法,效果很好。到目前为止,我唯一能看出的区别是,它在哪里工作,它是一个
Windows窗体
,而在另一个地方,它不工作,它是一个
用户控件

最烦人的是,当它出现错误时,它会关闭我的VisualStudio

任何帮助都将不胜感激

你可以试试这个

将此行添加到应用程序的主类中。这必须在任何事情之前进行

        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
将此代码添加到应用程序中

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string assemblyFullName;

            System.Reflection.AssemblyName assemblyName;

            assemblyName = new System.Reflection.AssemblyName(args.Name);
            assemblyFullName = System.IO.Path.Combine(
                System.IO.Path.Combine(
                    System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), <You folder>), assemblyName.Name + ".dll");

            if (System.IO.File.Exists(assemblyFullName))
                return System.Reflection.Assembly.LoadFile(assemblyFullName);
            else
                return null;
        }
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(对象发送方,ResolveEventArgs args args)
{
字符串assemblyFullName;
System.Reflection.AssemblyName AssemblyName;
assemblyName=新系统.Reflection.assemblyName(args.Name);
assemblyFullName=System.IO.Path.Combine(
System.IO.Path.Combine(
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),assemblyName.Name+“.dll”);
if(System.IO.File.Exists(assemblyFullName))
返回System.Reflection.Assembly.LoadFile(assemblyFullName);
其他的
返回null;
}
这将仅加载应用程序文件夹或您定义的文件夹中的程序集。您可以尝试此操作

将此行添加到应用程序的主类中。这必须在任何事情之前进行

        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
将此代码添加到应用程序中

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string assemblyFullName;

            System.Reflection.AssemblyName assemblyName;

            assemblyName = new System.Reflection.AssemblyName(args.Name);
            assemblyFullName = System.IO.Path.Combine(
                System.IO.Path.Combine(
                    System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), <You folder>), assemblyName.Name + ".dll");

            if (System.IO.File.Exists(assemblyFullName))
                return System.Reflection.Assembly.LoadFile(assemblyFullName);
            else
                return null;
        }
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(对象发送方,ResolveEventArgs args args)
{
字符串assemblyFullName;
System.Reflection.AssemblyName AssemblyName;
assemblyName=新系统.Reflection.assemblyName(args.Name);
assemblyFullName=System.IO.Path.Combine(
System.IO.Path.Combine(
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),assemblyName.Name+“.dll”);
if(System.IO.File.Exists(assemblyFullName))
返回System.Reflection.Assembly.LoadFile(assemblyFullName);
其他的
返回null;
}

这将仅加载应用程序文件夹或您定义的文件夹中的程序集

出于某种原因,仅当我从设计器窗口绑定数据时,问题才出现。我试着用代码绑定它,结果成功了

在我将此添加到Designer.Cs后:

private System.Windows.Forms.BindingSource getEntiteitenDataBindingSource3;
this.getEntiteitenDataBindingSource3 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.getEntiteitenDataBindingSource3)).BeginInit();
this.entiteitenGrid.DataSource = this.getEntiteitenDataBindingSource3;
this.getEntiteitenDataBindingSource3.DataSource = typeof(getEntiteitenData);
((System.ComponentModel.ISupportInitialize)(this.getEntiteitenDataBindingSource3)).EndInit();

现在一切似乎都正常了,我想绑定的列现在在设计器中是真实可见的。

出于某种原因,只有在我从设计器窗口绑定数据时,问题才会出现。我试着用代码绑定它,结果成功了

在我将此添加到Designer.Cs后:

private System.Windows.Forms.BindingSource getEntiteitenDataBindingSource3;
this.getEntiteitenDataBindingSource3 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.getEntiteitenDataBindingSource3)).BeginInit();
this.entiteitenGrid.DataSource = this.getEntiteitenDataBindingSource3;
this.getEntiteitenDataBindingSource3.DataSource = typeof(getEntiteitenData);
((System.ComponentModel.ISupportInitialize)(this.getEntiteitenDataBindingSource3)).EndInit();


现在一切似乎都正常了,我想绑定的列现在在设计器中是真实可见的。

您是否将Assemblys属性特定的版本更改为false?这将阻止应用程序加载该组件的早期版本。是的,我这样做了,不会更改结果。并且使用程序集解析程序?老实说,我不熟悉,这是visual studio中的函数吗?是否将程序集属性特定的版本更改为false?这将阻止应用程序加载该组件的早期版本。是的,我这样做了,不会更改结果。是否使用程序集解析器?老实说,我不熟悉,这是visual studio中的函数吗?我尝试添加它,但行“AppDomain.CurrentDomain.AssemblyResolve+=new ResolveEventHandler”(CurrentDomain_AssemblyResolve)不起作用。我不明白的是,如果我在构建代码,它工作正常。问题是当我绑定数据源时,他会突然关闭程序并给出错误。您有什么错误?这是错误:当前上下文中不存在名称“AppDoman.CurrentDoman.AssemblyResolve”您有解决方法吗主类中的er?是否使用System;创建了此命名空间?我尝试添加它,但行'AppDomain.CurrentDomain.AssemblyResolve+=new ResolveEventHandler(CurrentDomain_AssemblyResolve)不起作用。我不明白的是,如果我在构建代码,它工作正常。问题是当我绑定数据源时,他会突然关闭程序并给出错误。您有什么错误?这是错误:当前上下文中不存在名称“AppDoman.CurrentDoman.AssemblyResolve”您有解决方法吗er在主类中?当我将用户控件加载到我的主窗体时,你是否使用System;Nevermind拥有这个名称空间?它会生成相同类型的错误。我对此非常恼火,因为我真的不知道如何修复它。无论何时,当我将用户控件加载到我的主窗体时,它都会生成相同类型的错误。真的吗我不喜欢这个,因为我真的不知道如何解决这个问题。