2008-10-22 64 views
11

当我在我的电脑上添加引用的Microsoft.Office.Interop.Excel时,Visual Studio会将此项目文件:不同的Interop引用不起作用

<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> 

有是谁得到的错误,需要一个DLL文件添加到名为interop.excel.dll中的项目,该项目与此代替上面的代码在项目文件球队另一名开发人员:

<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>My Project\Interop.Excel.dll</HintPath> 
</Reference> 

这确实对我的工作电脑。

您能否解释两种方法之间的差异,哪种最好,以及如何让第一种方法在其他计算机上工作?

回答

0

我已经使用Excel自动化的方式比我想承认,我从来没有引用Interop.Excel.dll。我一直引用前者。他为什么引用它,他得到了什么错误?

你们是否引用了相同版本的excel(5.0节11.0)?你们是否有完全相同的办公室,服务包和所有版本?这可能是不同之处。

12

我也没有看到你的方法有问题。

当您添加对组件的引用时,VS通常会自动生成COM组件的互操作程序集。但是,当您添加对某个Office组件(XP或任何更高版本)的引用时,将添加对Microsoft预生成(并经过优化)的主互操作程序集的引用,如第一个示例中所示。该行

<WrapperTool>primary</WrapperTool> 

表示使用此PIA。

如果您正确添加PIA引用此引用的CopyLocal属性应该设置为false,并且路径属性应该是这样的

C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll 

你会发现在互操作程序一些细节在此MSDN article中。

要获得第一种方法,必须在机器上安装Office主互操作程序集(PIA)。有可用的可再发行版本微软:

据我所知,这些PIA的只会收到已安装.NET Framework当Office安装程序进行安装,这就是为什么有是针对PIA的独立可再发行组件。

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

+1

另请注意,PIA包含额外的粘合代码,可避免使用生成的互操作程序集时可能发生的内存/资源泄漏。 – 2010-01-25 15:00:17

0

我找到了最简洁的方式来使用它,这也允许多个版本的互操作,是创建一个共享bin \ Office Interop \ 11或12 \ Microsoft.Office.Interop.Excel.dll \并重新引用它们从项目中,工作不同版本