今天在解決方案中添加了一個新的項目,因用到其它的DLL所以在引用中增加了該DLL的引用。添加完后重新編譯發現報以下錯誤:
The type or namespace name XXX could not be found (are you missing a using directive or an assembly reference?)
仔細試驗后發現將DDL引用加上后,在cs文件中是可以取到該類下的方法和屬性的,但編譯后報錯,且報錯后也無法再取到該類下的方法和屬性。而該解決方案下的其它項目也是相同的引用和寫法卻沒有出錯。初步判斷是項目的設置有問題。
與其它項目比較后發現是Target framework的選項不對。當前選擇的是.NET Framework 4 Client Profile,而其它項目選擇的是.NET Framework 4。修改該選項后編譯成功。
上網搜索后發現原來.NET Framework 4 Client Profile是.NET Framework 4的精簡版。.NET Framework 由於起來越大對於發布很不方便。試想一下如果只是一個小小的應用程序文件 (幾十或幾百KB) 卻要夾一個那 大的 .NET Framework Redistributable Package,大概很多開發人員都會覺得麻煩,就算開發人員接受,但在企業網絡的 IT 管理人員就不一定會接受了。所以微軟就將 .NET Framework 部份不常用的功能由主函數庫中抽離出來,讓Redistributable Package可以縮小,有利於重新發布應用程序。這樣就會造成許多類不可用。如果引用的DLL中用到了那些被取消的類就會報錯。