Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net DLL不';从其原始位置移除时不工作_.net_Vb.net_Dll - Fatal编程技术网

.net DLL不';从其原始位置移除时不工作

.net DLL不';从其原始位置移除时不工作,.net,vb.net,dll,.net,Vb.net,Dll,我正在用VB.NET编写一个应用程序,它的一个要求是与一个硬件接口以进行光功率测量。生产该硬件的公司在这台机器上有DLL(它运行的是Windows 2000或XP,具体取决于我看的是哪一台),我们目前有一个软件,可以与这些DLL一起工作,并且是用VB6编写的 除了与这些机器接口外,我正在编写的应用程序还需要与其他机器接口,这些机器使用不同公司生产的硬件进行测量,并使用不同的调用。因为我不知道DLL会一直存在,所以我决定将它们包括在程序中 我在VB6项目中检查了使用了哪些引用,并基于这些引用,将必

我正在用VB.NET编写一个应用程序,它的一个要求是与一个硬件接口以进行光功率测量。生产该硬件的公司在这台机器上有DLL(它运行的是Windows 2000或XP,具体取决于我看的是哪一台),我们目前有一个软件,可以与这些DLL一起工作,并且是用VB6编写的

除了与这些机器接口外,我正在编写的应用程序还需要与其他机器接口,这些机器使用不同公司生产的硬件进行测量,并使用不同的调用。因为我不知道DLL会一直存在,所以我决定将它们包括在程序中

我在VB6项目中检查了使用了哪些引用,并基于这些引用,将必要的DLL传输到项目中,将它们作为引用加载,然后编译项目。但它没有运行。我尝试过复制或不复制DLL,将它们放在我用来编写应用程序的计算机上的同一路径中。我所做的一切似乎都会导致以下错误:

无法加载文件或程序集Interop.Instrument12001b、版本=1.0.0.0、区域性=中性、公钥标记=null或其依赖项之一。系统找不到指定的文件

在这一点上,我不确定我还有什么选择。我可以试着在运行时加载DLL,但是1)我可以忽略错误来编译程序吗?2)即使我不知道DLL的内容,这是否有效

编辑:
事实证明,整个问题都是由于VS2013 Express中的一个bug造成的。无论出于何种原因,该特定版本的Visual Studio都不会为.NET 2.0创建互操作DLL。我可以使用VS2010 Express来解决这个问题。

当您引用COM库时,VS会生成一个互操作DLL,它是一个.NET程序集,允许您的.NET应用程序与COM库进行互操作。部署时,互操作库必须与EXE位于同一文件夹中,但您仍需要COM库存在并在目标计算机上注册,否则就没有什么可互操作的功能。

您可以使用解决此类问题。当您说“已注册”时,你的意思是在原来的机器上的同一个位置,还是我还需要做些什么才能让图书馆注册?我是否还需要将互操作DLL与程序一起带来?它们是否未包含在EXE文件中?如果DLL“包含”在EXE文件中,则我不会说“互操作库必须与EXE位于同一文件夹中”。至于注册,COM就是这样工作的。NET的一大优点是,您可以简单地将程序集放到机器上,它就可以工作了。对于COM组件,您必须向系统注册它们,以便系统知道它们是什么以及它们在哪里。如果COM组件未注册,则系统不知道它存在,因此没有应用程序可以使用它。如果您想了解更多有关注册COM组件的信息,可以使用web搜索。谢谢。好消息是,在将这些互操作库放在它们所属的位置之后,我不再收到系统找不到指定文件的错误消息。坏消息是,我收到一个错误,上面写着“程序集是由比当前加载的运行时更新的运行时生成的,无法加载”,这让我在.NET 2.0中编译和在.NET 2.0.Update中运行时感到困惑:看起来问题可能是由于tlbimp.exe使用.NET 4.5转换COM文件,所以我现在正在调查。