無法嵌入互操作類型

來源:互聯網
上載者:User

針對word或excel操作時,出現VS2010中,無法嵌入互操作類型“……”,請改用適用的介面的解決方案

問了度娘,解決方案如出一轍:選中項目中引入的dll,滑鼠右鍵,選擇屬性,把“嵌入互操作類型”設定為False。問題輕鬆解決後,應該有很多人糾結這個“嵌入互操作類型”到底是個什麼意思呢?下面讓我慢慢的道來。(如果你時間不多,直接看紅色字型部分)

 

 就軟體而言,互通性——這條術語用來描述的是不同的程式(programs)藉助於同一套交換格式(exchange
formats)來交換資料,讀寫相同檔案格式(file formats)以及採用相同協議(protocols)的能力。(互通性的這種定義並‘沒有’期望那種在不同處理器平台<processor
platforms >之上執行相同二進位代碼<binary code>的能力。)互通性的缺乏可能是在程式設計期間對於標準化(standardization)缺乏重視的一種後果。實際上,在電腦世界(computing
world)的那些並未基於標準的部分當中,互通性也的確並非理所當然的事情。

  根據國際標準ISO/IEC 2382-01
資訊技術詞表,基礎術語(ISO/IEC 2382-01, Information Technology Vocabulary, Fundamental Terms),互通性定義如下:“在幾乎或幾乎無須使用者瞭解各種功能單元的獨特特性的情況下,這些功能單元之間進行通訊、執行程式或者傳輸資料的能力”。以上兩段是維基百科對“互通性”的解釋,讓我們對“嵌入互操作類型”有了個基本的概念。

  那就接著講什麼叫“嵌入互操作類型”,下面是摘自msdn雜誌上的一段。可能會給我們一些啟迪和認識。

嵌入 COM Interop類型

 

 

這更像是 C# 編譯器功能,而不像是 C# 語言功能,但您現在可以使用 COM Interop程式集,而不要求該程式集在運行時必須存在。目的是減輕將 COM Interop程式集與您的應用程式一起部署的負擔。

當 COM Interop在最初版本的 .NET Framework 中引入時,就確立了主要 Interop 組件 (PIA) 的概念。引入此概念,是為瞭解決在組件之間共用 COM 物件的難題。for instance:如果您有一些不同的Interop 組件,分別定義了一個 Excel Worksheet,則我們無法在組件之間共用這些 Worksheet,因為它們具有不同的 .NET 類型。PIA 通過只存在一次而解決了這個難題:所有用戶端都使用它,因此
.NET 類型始終是匹配的。

  儘管 PIA 在理論上是個好主意,但在實際部署中卻被證明是個大麻煩,因為它只有一份,而有多個應用程式可能會嘗試安裝或卸載它。而由於 PIA 通常很大,事情更複雜了。Office 在預設 Office 安裝方式中並未部署它們,使用者只需通過使用 TLBIMP 來建立自己的Interop 組件,即可輕鬆繞過這一個程式集系統。

  因此,現在為了扭轉這種局面,發生了兩件事:

對於兩個結構相同且共用相同識別特徵(名稱、GUID 等)的 COM Interop類型,運行時能夠聰明地將其看作同一個 .NET 類型。C# 編譯器利用這一點的方式是在編譯時間直接在您自己的程式集中重現互操作類型,因此不再要求在運行時存在該Interop 組件。

由於篇幅所限,我不得不省略一些詳細資料,但即使不瞭解這些資訊,您也應該能夠毫無障礙的使用這個功能,就像動態功能一樣。您通過將引用上的“嵌入式互操作類型”屬性設定為 true,告訴編譯器為您將互操作類型嵌入到 Visual Studio 中。

由於 C# 團隊希望這種方法成為引用 COM 程式集的首選方法,因此在預設情況下,Visual Studio 會將添加到 C# 項目中的任何新互操作引用的此屬性設定為 True。如果您使用命令列編譯器 (csc.exe) 來編譯您的代碼,請使用 /L 開關,而不是 /R 開關,來嵌入您必須引用的Interop 組件中的互操作類型。

  本文中介紹的所有功能本身都可以產生大量討論,每一個主題都值得撰文論述。我省略了許多詳細資料,也有許多詳細資料只是一帶而過。看到這裡,我們大概有了清楚的認識,那就讓我先做幾點總結吧(不足之處歡迎補充)。

1.”嵌入互操作類型”中的嵌入就是引進、匯入的意思,類似於c#中using,c中include的作用,目的是告訴編譯器是否要把互操作類型引入。

2.“互操作類型”實際是指一系列Com組件的程式集,是公用運行庫中庫檔案,類似於編譯好的類,介面等。

3.“嵌入互操作類型”設定為true,實際上就是不引入互操作集(編譯時間候放棄Com程式集),僅編譯使用者代碼的程式集。

而設定為false的話,實際就是需要從Interop 組件中擷取 COM 類別型的類型資訊。

不知道大家明白了沒有,我是有點明白了。。。

原文出處:http://www.cnblogs.com/pnljs/archive/2012/02/20/2359313.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.