Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Vb.net 两台不同计算机上的不同互操作引用不';行不通_Vb.net_Excel_Dll_Interop - Fatal编程技术网

Vb.net 两台不同计算机上的不同互操作引用不';行不通

Vb.net 两台不同计算机上的不同互操作引用不';行不通,vb.net,excel,dll,interop,Vb.net,Excel,Dll,Interop,在我的计算机上添加对Microsoft.Office.Interop.Excel的引用时,Visual Studio会将以下内容添加到项目文件中: <COMReference Include="Excel"> <Guid>{00020813-0000-0000-C000-000000000046}</Guid> <VersionMajor>1</VersionMajor> <VersionMinor>5</

在我的计算机上添加对Microsoft.Office.Interop.Excel的引用时,Visual Studio会将以下内容添加到项目文件中:

<COMReference Include="Excel">
  <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>5</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>
<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>My Project\Interop.Excel.dll</HintPath>
</Reference>

{00020813-0000-0000-C000-0000000000 46}
1.
5.
0
主要的,重要的
假的
团队中还有一名开发人员出现错误,需要向项目中添加一个名为Interop.Excel.DLL的DLL文件,该文件将在项目文件中用以下代码替换上述代码:

<COMReference Include="Excel">
  <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>5</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>
<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>My Project\Interop.Excel.dll</HintPath>
</Reference>

假的
我的项目\Interop.Excel.dll
这在我的电脑上可以用


请您解释一下这两种方法之间的区别,哪种是最好的,以及如何让第一种方法在其他计算机上工作?

我使用Excel自动化的方式比我想承认的要多,而且我从未引用过Interop.Excel.dll。我总是引用前者。他为什么引用这个,他会犯什么错误


你们引用的是同一版本的excel(5.0对11.0)?你们有完全相同版本的office、service pakcs和所有软件吗?这可能是不同之处。

我认为你的方法也没有问题

通常,当您向组件添加引用时,VS将自动为COM组件生成互操作程序集。但是,当您添加对其中一个Office组件(XP或任何更高版本)的引用时,将添加对来自Microsoft的预生成(和优化)主互操作程序集的引用,如第一个示例所示。线路

<WrapperTool>primary</WrapperTool>
您将在此MSDN中找到有关互操作程序集的更多详细信息

要使第一种方法工作,必须在计算机上安装Office主互操作程序集(PIA)。Microsoft提供了一个可再发行的版本:

顺便说一句,这些PIA只有在安装了.NET Framework之后才由Office安装程序安装,这就是为什么PIA有一个单独的可再发行版本


注意:请确保引用目标Office的版本。但是,当针对多个版本的Office时,您可能会遇到一些问题。这种情况下的解决方案可能是延迟绑定(如果性能不是问题)。

我发现使用它最干净的方法,这也允许多个版本的互操作,就是创建一个共享的bin\Office interop\11或12\Microsoft.Office.interop.Excel.dll\并从项目中引用它们,适用于不同版本

另请注意,PIA包含额外的粘合代码,以避免在使用生成的互操作程序集时可能发生的内存/资源泄漏。如何确保使用PIA而不是生成的互操作。我相信我看到了@David Schmitt's中提到的内存/资源泄漏comment@user260197:PIA应正确安装在系统上。您可以从Microsoft获得一个安装程序来处理安装。特别重要的是,PIA应在GAC中注册。请参阅中的详细信息