﻿# .NET 4.0 專案參考 COM 元件需注意是否內嵌 Interop 型別

我公司最近正如火如荼的採用 .NET 4.0 全新技術做開發，但最近在升級舊有專案時發現有個專案升級的並不順利，由於該專案有參考一個 PKI 加密元件，該元件是採用 COM 技術做開發，所以在以前在專案裡參考 COM 元件時都會預設產生一個 Interop 組件可供參考，但 .NET 4.0 提供一個**內嵌 Interop 型別**的功能，當你在 Visual Studio 2010 將 .NET 3.5 專案升級上 .NET 4.0 後該 Interop 組件的參考屬性預設會設定為 True，這就有可能導致專案無法編譯的問題。

遇到這個問題在專案編譯時大概會出現以下錯誤：

-   型別 XXXAtxServer.ServerClass' 沒有已定義的建構函式
-   無法內嵌 Interop 型別 'AresEmsgAtxServer.EmsgServerClass'。請改用適當的介面。
-   'PKI\_ATXLib.AtxCertificateClass' 不包含 'SN' 的定義，也找不到擴充方法 'SN' 來接受型別 'PKI\_ATXLib.AtxCertificateClass' 的第一個引數 (您是否遺漏 using 指示詞或組件參考?)

解決方法也很簡單，只要參考以下步驟即可解決：

1\. 只要將專案 \[參考\] 的 COM 元件選取，並按下 F4 開啟屬性視窗

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/77311336a58fd3084fe1-image.png)

2\. 在將 \[**內嵌 Interop 型別**\] 設定為 False 即可！

    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c4dc22f303aaba2216a4-image.png)

**相關連結**

-   [.Net 4.0 – Interop type cannot be embedded. Use the applicable interface instead.](http://mokosh.co.uk/post/2010/04/10/net-4-0-interop-type-cannot-be-embedded-use-the-applicable-interface-instead/)
