VS2012 Web项目在 VS2013 RC中遇到的一点小坎坷

衣明志 发表于 , 阅读 (17605)

昨天赶在坑爹的苹果发布会之前,在我的yoga上安装了Windows 8.1。感觉真的是非常酷啊,内心暗暗的说如果当初8发布的时候有这样的效果,也许评价会好多了,至少也不至于那么惨是吧。至于Windows 8.1的介绍,我将另起一片博文来絮叨一下。

安装了新系统自然想把开发环境也换成新的,按照往年的情况,作为发布候选版的RC版开发工具就已经基本稳定了,可以在正式开发环境中尝试使用了。于是,我迫不及待地下载了VS2013 RC版,并尝试在公司的项目中试用。

VS2013的功能确实增加了不少,也很多地方有所优化。比如说文件夹的图标改成黄色了,辨识度终于提高了。用VS2013打开项目,编译没有问题,蛮开心的啊。可开始用调试web项目的时候发现,大量js错误,以为源代码有问题,于是在另外一台机器上用VS2012打开项目并调试,完全没有问题。这就奇怪了,为什么在Windows 8.1+VS2013的环境上就前端脚本崩溃呢?思考一下,然后找原因吧。

首先,代码是一样的,而且用VS2013发布的代码,部署到测试服务器上运行的也一切正常,可以判定不是代码或编译器的问题。

那么,会不会是IIS Express 8的问题呢?对比了“我的文档”目录下IIS Express文件夹中的配置文件,跟旧环境中的一模一样。那么应该也不是这个引起的。

既然是前端js报错,那会不会是IE11不支持什么js库的问题?于是换了chrome和ff,发现问题一样。真是奇了怪了,IE11中按F12,我靠!开发者工具变的跟个VS似的!先不管了,看看脚本引用是否异常吧。

IE11 Developer Tools

要知道项目中用requirejs,看脚本错误应该是requirejs无法正常加载jquery模块和相关模块的一些依赖。那应该就是有什么东西,扰乱了requirejs的"心境"。

<script>
    var require = {
        paths: {
            "jquery": "http://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.1/jquery.min",
            "bootstrap": "http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min"
        },
        shim: {
            "bootstrap": ['jquery']
        }
    };
</script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.8/require.min.js"></script>
<script>
    require(['bootstrap'], function () {
    });
</script>

启用网络访问监控,发现页面多了几个莫名其妙的js引用,看内容居然跟SingnalR有关联。于是查阅VS2013相关文档资料,发现原来在VS2013中加入了一个叫做"Browser Link"的特性。用来监测调试过程中各种访问当前web的浏览器相关的请求状况,可供开发者调试和分析一些复杂的web应用运行。而且,就像过去一样,微软总是会把一些胳膊伸的很长——这个功能默认是启用的。不想用怎么办?关掉!下面是集中关掉它的方法:

  • 如果用调试(debug)按钮,启动调试web应用程序。那么在调试启动后,调试按钮旁边有个菜单项:"Enable Browser Link"。它此时是被勾选的状态,点击它取消勾选状态,就ok了。
  • 将web.config中的debug值设置为false,也能关闭"Browser Link"功能。但是个人不建议,毕竟我们还要调试的嘛。
  • 在web.config中的appSettings中加一个设置项:<add key="vs:EnableBrowserLink" value="false" />这是我个人推荐的方法

小提示

VS2013 RC毕竟还是候选版本,而不是正式版。如果项目开发对VS的第三方扩展依赖较多,目前请慎重升级,因为VS2013 RC的扩展和更新管理器中还缺少一些优秀的第三方扩展。比如SpecFlow,据作者回复在9月底之前更新扩展版本,以便能够支持VS2013。