2008-10-22 59 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 \並重新引用它們從項目中,工作不同版本