選擇 .netmodule 輸入檔的格式

MSIL .obj 檔 (使用 /clr 進行編譯) 也可以用做 . netmodule 檔。 .obj 檔包含中繼資料和原生符號。 . netmodule 僅包含中繼資料。

您可以經由 /addmodule 編譯器選項,傳遞 MSIL .obj 檔給其他任何 Visual Studio 編譯器 (但是請注意,.obj 檔會變成所產生組件的一部分,而且必須隨附於組件中)。 例如,Visual C# 和 Visual Basic 都有 /addmodule 編譯器選項。

注意事項注意事項

在大部分情況下,您將需要從建立 .net 模組的編譯,傳遞 .obj 檔給連結器。只有一種情況例外,如果 .netmodule 是使用 /clr:pure 建立,就不需要。傳遞 .dll 或 .netmodule MSIL 模組檔案給連結器,可能會產生 LNK1107。

.obj 檔案加上其相關聯的 .h 檔案 (經由原始程式碼中的 #include 加以參考),可以讓 C++ 應用程式使用模組中的原生型別,而在 . netmodule 檔中,只有 Managed 型別才能由 C++ 應用程式加以使用。 如果您嘗試傳遞 .obj 檔給 #using,就無法使用關於原生型別的資訊;請改用 #include .obj 檔案的 .h 檔案。

其他 Visual Studio 編譯器僅能使用模組的 Managed 型別。

使用下列各項,判斷是需要使用 . netmodule 或 .obj 檔做為 Visual C++ 連結器的模組輸入:

  • 如果是使用 Visual C++ 以外的 Visual Studio 編譯器進行建置,則要產生 . netmodule,並使用 . netmodule 做為連結器的輸入。

  • 如果是使用 Visual C++ 編譯器產生模組,而且如果模組將用來建置程式庫以外的其他項目,請使用由編譯器產生的 .obj 檔案做為連結器的模組輸入,切勿使用 . netmodule 檔案做為輸入。

  • 如果您的模組將用來建置原生 (非 Managed) 程式庫,請使用 .obj 檔做為連結器的模組輸入,然後產生.lib 程式庫檔案。

  • 如果您的模組將用來建置 Managed 程式庫,而且如果連結器的所有模組輸入都能夠進行驗證 (以 /clr:safe 產生),請使用 .obj 檔案做為連結器的模組輸入,然後產生 .dll (組件) 或 . netmodule (模組) 程式庫檔案。

  • 如果您的模組將用來建置 Managed 程式庫,而且如果連結器的所有模組輸入都將以 /clr:pure 或 /clr:safe 產生,請使用 .obj 檔案做為連結器的模組輸入,然後產生 .dll (組件) 或 . netmodule (模組) (如果您只想從程式庫公開 Managed 型別)。 如果您要從程式庫公開 Managed 型別,而且如果您也要 C++ 應用程式使用程式庫中的原生型別,您的程式庫將會由程式庫元件模組的 .obj 檔案組成 (您也需要在每個模組中隨附 .h 檔案,讓它們可由原始程式碼利用 #include 加以參考)。

  • 如果您的模組將用來建置 Managed 程式庫,而且如果連結器的一個或多個模組輸入都將以 /clr 產生,請使用 .obj 檔案做為連結器的模組輸入,然後產生 .dll (組件)。 如果您要從程式庫公開 Managed 型別,而且如果您也要 C++ 應用程式使用程式庫中的原生型別,您的程式庫將會由程式庫元件模組的 .obj 檔案組成 (您也需要在每個模組中隨附 .h 檔案,讓它們可由原始程式碼利用 #include 加以參考)。

請參閱

參考

.netmodule 檔做為連結器輸入