時(shí)隔多年,又把ASP.NET MVC撿起來(lái)。以前用的MVC3,現(xiàn)在都到MVC5了,以前的東西有點(diǎn)跟不上了。趕緊把遇到的坑都記下來(lái),也算是邊開發(fā),邊總結(jié)。
1. IIS 7.5的部署
在win7或server 2008上部署MVC5項(xiàng)目需要安裝.NET Framework 4.5.1,否則會(huì)在<compilation>和<httpRuntime>節(jié)點(diǎn)處報(bào)錯(cuò),稱targetFramework不匹配。
2. SQLite及Entity Framework 6配置
要使用VS的ADO.NET數(shù)據(jù)實(shí)體向?qū)В枰惭bSQLite for Visual Studio。下載時(shí)注意選擇匹配的VS版本。在MVC項(xiàng)目中,用NuGet添加Entity Framework(版本選6.20或6.0)和System.Data.SQLite(SQLite在NuGet上只維護(hù)了一個(gè)最新版,本文選擇1.0.106)。
3. 修改 web.config 文件
雖然通過(guò)NuGet安裝SQLite可以自動(dòng)添加引用并修改web.config,但自動(dòng)修改的配置文件有誤,需要修改entityFramework節(jié)點(diǎn)下的providers,正確的配置如下:
<providers>
<provider invariantName="System.Data.SQLite"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SQLite.EF6"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
而<providers>的前一個(gè)兄弟節(jié)點(diǎn)<defaultConnectionFactory>,如不使用VS自帶的SQL Server Local DB也可去掉該默認(rèn)數(shù)據(jù)庫(kù)連接工廠類。
4. BundleConfig 的配置
BundleConfig中定義了css和js的虛擬路徑,在最終生成的HTML中對(duì)資源的引用也是該虛擬路徑。但如果在css中有對(duì)圖片或字體的引用,且使用了相對(duì)路徑如background-image: url(../img/test.jpg),多數(shù)情況下,都會(huì)找不到這個(gè)test.jpg。這是因?yàn)閏ss中外聯(lián)的圖片、字體等文件并不存在于我們指定的虛擬路徑下,而虛擬路徑下又只有css和js文件。這就導(dǎo)致了圖片和字體的丟失。解決辦法有三:
- 對(duì)有外聯(lián)其他資源的css文件,單獨(dú)配置一個(gè)bundle,指定虛擬路徑時(shí)讓其與實(shí)際物理路徑相同。
- 將有外聯(lián)其他資源的css文件進(jìn)行修改,把
../img/test.jpg這樣的相對(duì)路徑都改為/Content/img/test.jpg這樣的絕對(duì)路徑。缺點(diǎn)是修改后的css文件與網(wǎng)站目錄高度耦合,換一個(gè)目錄結(jié)構(gòu)就又要修改。 - 修改Transformer