SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
在VS2010中編譯上述代碼,提示“無法嵌入互操作類型“SQLDMO.BackupClass”。請改用適用的接口。” 經過查閱相關資料發現,將引用的Interop.ADOX和Interop.SQLDMO引用屬性中的嵌入互操作類型設置為False即可。
具體原理還不是特別理解,見http://www.cnblogs.com/pnljs/archive/2012/02/20/2359313.html
這里面提到一點,“嵌入互操作類型”設定為true,實際上就是不引入互操作集(編譯時候放棄Com程序集),僅編譯用戶代碼的程序集。而設定為false的話,實際就是需要從互操作程序集中獲取 COM 類型的類型信息。這是不是意味着,嵌入是更輕量化的引用,只編譯需要編譯的部分,將引用的部分代碼編譯到本地的程序集中。而可以不依賴於原始的dll,比如Interop.ADOX。程序可以脫離該dll運行,因為所需要的代碼已經“嵌入”到程序里了。
如此看來,這樣確實可以減輕程序的負擔,然而一旦遇到像這種,無法嵌入的話,只能老老實實引用這個dll,將“嵌入互操作類型”設置為False,即可。