时隔多年,又把ASP.NET MVC捡起来。以前用的MVC3,现在都到MVC5了,以前的东西有点跟不上了。赶紧把遇到的坑都记下来,也算是边开发,边总结。
1. IIS 7.5的部署
在win7或server 2008上部署MVC5项目需要安装.NET Framework 4.5.1,否则会在<compilation>
和<httpRuntime>
节点处报错,称targetFramework
不匹配。
2. SQLite及Entity Framework 6配置
要使用VS的ADO.NET数据实体向导,需要安装SQLite for Visual Studio。下载时注意选择匹配的VS版本。在MVC项目中,用NuGet添加Entity Framework(版本选6.20或6.0)和System.Data.SQLite(SQLite在NuGet上只维护了一个最新版,本文选择1.0.106)。
3. 修改 web.config 文件
虽然通过NuGet安装SQLite可以自动添加引用并修改web.config
,但自动修改的配置文件有误,需要修改entityFramework
节点下的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>
的前一个兄弟节点<defaultConnectionFactory>
,如不使用VS自带的SQL Server Local DB也可去掉该默认数据库连接工厂类。
4. BundleConfig 的配置
BundleConfig中定义了css和js的虚拟路径,在最终生成的HTML中对资源的引用也是该虚拟路径。但如果在css中有对图片或字体的引用,且使用了相对路径如background-image: url(../img/test.jpg)
,多数情况下,都会找不到这个test.jpg
。这是因为css中外联的图片、字体等文件并不存在于我们指定的虚拟路径下,而虚拟路径下又只有css和js文件。这就导致了图片和字体的丢失。解决办法有三:
- 对有外联其他资源的css文件,单独配置一个bundle,指定虚拟路径时让其与实际物理路径相同。
- 将有外联其他资源的css文件进行修改,把
../img/test.jpg
这样的相对路径都改为/Content/img/test.jpg
这样的绝对路径。缺点是修改后的css文件与网站目录高度耦合,换一个目录结构就又要修改。 - 修改Transformer