Hello World
Spiga

概念,依旧是概念……csproj文件是做什么用的?

2008-08-04 08:57 by 老赵, 40631 visits

不管是不是有人会说老赵是“学术派”,“学术派”是不是适合“做项目”,我还是要强调事物的“概念”和描述一个问题的严谨性。我不认为在面试时回答“我都是在做实际项目,但是对于概念都不太关心”的人真有能力把项目做好。老赵觉得将一些事物的概念理清之后,有些推论自然而然就得出了,想要“误解”也很难。例如:“HTTP是无状态的 => 那么服务器端如果要知道当前请求用了哪个Session空间就要客户端告知了 => 客户端存储?那么SessionID应该是放在Cookie里的 => 禁用了Cookie还能不能用Session?除非有其他传递SessionID的方式,比如URL,否则就不能用”。数学是最为严谨的科学,各种定理和推论也全部是靠最基本的公理得出的——当然知道了公理能不能推出定理,这也需要相当的水平,因此我们也需要继续学习,锻炼这种“推理”的“思维能力”。所以老赵也不相信号称“做项目不需要懂数据结构”的朋友能够有较好的编程能力,能够应对“只有CURD逻辑”以外的应用程序……不多说了,进入我们的正题。

本来今天是在写一篇关于LINQ的文章,不过写着写着忽然觉得有些找不着北的感觉,似乎有点过于发散了?于是来博客园逛了一下,正好发现有朋友发了一篇文章《.NET面试题,看看你的水平》,于是就在这篇文章里和目前正红火的小包子同学为某个问题进行了一番争论。而在吵吵闹闹的过程中看到这么一句话“pdb文件需要放在Debug目录下才有效果”,忽然觉得有个话题值得一说:“开发环境与运行环境”。回想起平时被问到的问题,发现有不少朋友对于开发环境和运行环境并不是分的非常清楚。那么就让我们从标题中的问题开始:“csproj文件究竟是做什么用的”。

csproj文件大家应该不会陌生,那就是C#项目文件的扩展名,它是“C Sharp Project”的缩写。那么它究竟是给谁用的呢?那是给开发工具用的,例如我们在熟悉不过的Visual Studio,以及大家可以没有接触过,但是应该都听说过的MSBuild.exe。Visual Studio会根据csproj里的XML定义来管理项目文件以及相关其他一些种类非常丰富的数据及操作,MSBuild也会根据csproj文件来得知编译这个项目需要有哪些依赖,默认输出路径,Pre-Build和Post-Build需要哪些操作等等。Visual Studio和MSBuild都是开发工具,这就是csproj存在的唯一意义:为“开发环境”提供信息。而到了运行环境中,根本不会有人(操作系统?)关心所谓的csproj文件——也就是“程序是哪里来的”。

如果是个可执行程序,操作系统需要的只是exe,dll,甚至是配置文件或资源文件,而并非在开发中举足轻重的csproj,sln,dbproj等文件。而像IIS这样的运行环境,更加不会去关注csproj的影子:“csproj是什么?”IIS轻蔑地说,“我只听web.config的说法”。在运行环境中,csproj的辉煌不在——这是自然,你有办法向我们的IIS证明它使用的dll在开发期是由csproj,sln等文件来“统领”的吗?现在说到之前提到的“pdb文件需要放在Debug目录下才有效果”,其实不然。Debug目录只是VS的模板所“默认存在”的编译规则所生成的目录而已,我们在调试时使用pdb文件完全可以由VS指定pdb文件存在的目录——甚至我们根本不需要VS也能使用pdb文件。

说到了“模板”,这其实又是“开发环境”的概念。我们在VS中选择New Item或New Project时,可以在谈出窗口的左边找到模板的分类,而又边则是一堆可用的模板。这些模板是哪来的呢?自然是人为生成给VS用的,您不妨看看自己My Documents\Visual Studio 2008\Templates目录下是否存在一些zip文件,那就是存放“My Templates”的压缩包,感兴趣的朋友可以学习一下如何建立一个模板。而在“运行环境”下,更不会知道开发中用了什么模板。不知您是否提过这样的问题:“为什么Web Site中无法使用ASP.NET AJAX,而Web Application就可以?”现在您应该已经知道了,运行时期的问题和Web Site、Web Application与否没有任何关系。那么是如何产生这个问题的呢?看看您的Web.config?看看页面上提示了什么信息?用Fiddler看看请求的输出是什么?其实在很多时候“排错”并没有什么妙法,唯“仔细”二字。

而且事实上,“模板”在开发环境中的“地位”比csproj文件都要低,因为只要通过模板创建好内容之后,就无法说明结果和自己有什么联系了。例如我们使用模板创建一个AjaxControlToolkit的Extender,其中会生成一个.cs,一个.designer.cs和一个js文件——呵呵,谁还能证明这三个文件不是我们手动创建的呢?这就是“开发环境”,一切都是为了开发效率的提高,一切都是为了能够最终产生一个可执行的二进制文件。而在开发环境的最后一个成员“编译器”工作完成之后,所有开发工具便默默地退居二线。在产品环境的舞台上,最耀眼的一定不是我们的开发工具。

这就是“开发环境”与“运行环境”的宿命。


最后再重申一下:希望不会有人说老赵是“学术派”,因为那会侮辱“学术派”这个称谓。老赵从小一直梦想着当个科学家,可是正式因为学术水平太差而无法实现自己的理想。Randy Pausch教授实现了自己儿时的理想,老赵不行。但是老赵也相信Randy Pausch教授所说的,追求梦想的过程能够带来成长,能够让你找到新的梦想。

Randy Pausch Last Lecture: Really Achieving Your Childhood Dreams,推荐大家都去看看。

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

62 条回复

  1. Angel Lucifer
    *.*.*.*
    链接

    Angel Lucifer 2008-08-04 02:43:00

    沙发。
    这实际上还是基本功扎实与否的问题。

    PS: 那篇文章所提到的问题有很多值得商榷,铺开之后都能成一篇文章。甚至我发现有几个问题,连出题人自己都没搞清楚。

  2. Angel Lucifer
    *.*.*.*
    链接

    Angel Lucifer 2008-08-04 02:53:00

    板凳。

  3. volnet(可以叫我大V)
    *.*.*.*
    链接

    volnet(可以叫我大V) 2008-08-04 02:54:00

    其实在很多时候“排错”并没有什么妙法,唯“仔细”二字。
    追求梦想的过程能够带来成长,能够让你找到新的梦想。

    这两句太有价值了~收藏

  4. LuChaoShuai
    *.*.*.*
    链接

    LuChaoShuai 2008-08-04 03:05:00

    哪位同学有机会把那些题目给大学导师做一下。

    ps,我是真的明白"学术派"是啥意思。

  5. 老赵
    admin
    链接

    老赵 2008-08-04 03:17:00

    @LuChaoShuai
    大学导师应该是搞科研的

  6. 老赵
    admin
    链接

    老赵 2008-08-04 03:18:00

    @Angel Lucifer
    你有答案?

  7. Ivan-Yan
    *.*.*.*
    链接

    Ivan-Yan 2008-08-04 03:21:00

    想起跟主管解释我的一个文件的名字BLL的时候,我说这个是“业务逻辑”,他笑。
    我一直不明白他笑什么,可能是我对某些概念性的东西太过留意~~

  8. 银河
    *.*.*.*
    链接

    银河 2008-08-04 08:18:00

    楼主讲得很好。
    很清楚地讲出了开发环境和运行环境的区别。
    如果是要发布 Visual Studio 项目的源代码,也就是发布开发环境中的东东,我一般是把 bin 和 obj 目录以及 *.suo 文件删除后再打包发布。

  9. 非空
    *.*.*.*
    链接

    非空 2008-08-04 08:34:00

    还是学郭德纲当个二手科学家吧

  10. xjb
    *.*.*.*
    链接

    xjb 2008-08-04 08:54:00

    我建议老赵把解决方案下都所有配置文件都该讲一遍,这才比较系统,哈哈

  11. 老赵
    admin
    链接

    老赵 2008-08-04 08:57:00

    @xjb
    那东西就太多了

  12. 老赵
    admin
    链接

    老赵 2008-08-04 08:57:00

    @银河
    直接用publish,就好

  13. 老赵
    admin
    链接

    老赵 2008-08-04 08:58:00

    一早发现自己的文章不见了……顶一下,顶一下。

  14. jillzhang
    *.*.*.*
    链接

    jillzhang 2008-08-04 09:06:00

    现在园子比原来火多了,我的文也是,昨天12点发的,今天一看,已经快被淹没了。呵呵,也算是好事情吧。

  15. 巫云
    *.*.*.*
    链接

    巫云 2008-08-04 09:10:00

    @Jeffrey Zhao
    我帮你啊

  16. Vincent
    *.*.*.*
    链接

    Vincent 2008-08-04 09:14:00

    很可惜Randy Pausch已经去世了,只是没想到他的"最后一课"真的成了绝唱.

  17. 老赵
    admin
    链接

    老赵 2008-08-04 09:18:00

    @Vincent
    这倒是可以预料到的事情……

  18. 老赵
    admin
    链接

    老赵 2008-08-04 09:19:00

    --引用--------------------------------------------------
    jillzhang: 现在园子比原来火多了,我的文也是,昨天12点发的,今天一看,已经快被淹没了。呵呵,也算是好事情吧。
    --------------------------------------------------------
    博客园似乎可以想办法避免文章被挤下去,hmmm……

  19. Tony Zhou
    *.*.*.*
    链接

    Tony Zhou 2008-08-04 09:31:00

    恩,不错,那题目有1/3不会,有些有争议的还是希望老赵能给解答阿。

  20. DonLiang
    *.*.*.*
    链接

    DonLiang 2008-08-04 09:51:00

    --引用--------------------------------------------------
    Tony Zhou: 恩,不错,那题目有1/3不会,有些有争议的还是希望老赵能给解答阿。
    --------------------------------------------------------
    按照Scott Hanselman的回复,在这个帖子:http://www.ayende.com/Blog/PermaLink,guid,b6e3e8ce-4a6e-4cf0-af70-d360be9e8c76.aspx
    里,有大部分的题目解答。原文分了几个类的,那题目截取了中间的一部分。

  21. Caling Xie
    *.*.*.*
    链接

    Caling Xie 2008-08-04 09:57:00

    支持赵老师!

  22. 安眠花
    *.*.*.*
    链接

    安眠花 2008-08-04 10:39:00

    我觉得老赵肯定读过并且很欣赏王小波

  23. 清清杨柳风[未注册用户]
    *.*.*.*
    链接

    清清杨柳风[未注册用户] 2008-08-04 11:14:00

    百家争鸣,百花齐放,呵呵

  24. 王孟军!
    *.*.*.*
    链接

    王孟军! 2008-08-04 11:21:00

    整理得不错

  25. Zhuang miao
    *.*.*.*
    链接

    Zhuang miao 2008-08-04 11:45:00

    提到Randy Pausch,文章升华了不少

  26. Desmend
    *.*.*.*
    链接

    Desmend 2008-08-04 12:07:00

    很有感触,这有参考答案,自己也没搞很清楚,还请指教
    http://www.cnblogs.com/desmend/archive/2008/08/04/1259759.html

  27. 老赵
    admin
    链接

    老赵 2008-08-04 13:28:00

    --引用--------------------------------------------------
    Zhuang miao: 提到Randy Pausch,文章升华了不少
    --------------------------------------------------------
    没错没错

  28. 小呆呆[未注册用户]
    *.*.*.*
    链接

    小呆呆[未注册用户] 2008-08-04 17:33:00

    那最后谁能给出个合理的答案呢?老赵同志,能不能抽空写个参考答案呢?
    说实话,里面所有的问题我都搞的很含糊,有些根本不知道,感觉想再提高需要
    搞明白这些问题,有没有好心人来回答呢?

  29. CindyChen
    *.*.*.*
    链接

    CindyChen 2008-08-04 18:19:00

    “希望不会有人不会说老赵是“学术派”,因为那会侮辱“学术派”这个称谓。“——这句话是不是多了一个“不”,非常绕,我读了好几遍,楞是不明白啥意思。请解释一下吧。

    有一个小问题,”数学是最为严谨的科学“——数学,真正不能算是科学,应该只是一种工具。具体怎么解释,我也忘啦。请参考莫里斯·克莱因所著的《西方文化中的数学》,很好看的一本书!

  30. 老赵
    admin
    链接

    老赵 2008-08-04 19:06:00

    @CindyChen
    没错,多了个“不”字……

  31. fox23
    *.*.*.*
    链接

    fox23 2008-08-04 20:26:00

    --引用--------------------------------------------------
    Jeffrey Zhao: 一早发现自己的文章不见了……顶一下,顶一下。
    --------------------------------------------------------
    哈哈,怎么个顶法,我前天发在首页的文章居然神秘蒸发了.今天下午一看阅读数变成3了..太诡异了..

  32. luhang[未注册用户]
    *.*.*.*
    链接

    luhang[未注册用户] 2008-08-04 21:40:00

    IDE真是一个好东西,不需要编译,不需要链接

  33. AlexLiu
    *.*.*.*
    链接

    AlexLiu 2008-08-04 23:23:00

    http是不是翻译成无连接的协议好一点呢。

  34. kkun
    *.*.*.*
    链接

    kkun 2008-08-05 11:16:00

    刚好看完那个最后一课,刚好老赵同志没有贴出地址来,这时再贴出来就有点点意义了,也是google出来的
    http://www.youtube.com/watch?v=R9ya9BXClRw

  35. 银河
    *.*.*.*
    链接

    银河 2008-08-05 16:35:00

    @Jeffrey Zhao (11楼)
    > 直接用publish,就好
    我在8楼说的是:
    ---------------
    如果是要发布 Visual Studio 项目的源代码,也就是发布开发环境中的东东,我一般是把 bin 和 obj 目录以及 *.suo 文件删除后再打包发布。
    ---------------
    可能是“发布”这个词造成误解。我想仅把源程序代码(*.sln, *.cs)打包发布,而不想包括可执行文件。
    好象 publish 是要包括 *.exe 或者 *.dll 的,不能仅发布源程序代码。

  36. 阿齐
    *.*.*.*
    链接

    阿齐 2008-08-06 17:17:00

    好像大家批斗的对象“学院派”,而不是“学术派”吧!

  37. Jeffrey Chan
    *.*.*.*
    链接

    Jeffrey Chan 2008-08-08 15:55:00

    又学习了一些概念的知识。想必跟古代的那句知其然,也知其所以然。有同工异曲之妙吧。只要每天都在进步,哪怕是一点点也无谓,我会相信,我离我的梦想会越来越近的。
    每一片乐土都有仁人志士所向往,希望这句话对大家有所受用。

  38. ChenMo
    *.*.*.*
    链接

    ChenMo 2008-08-11 14:52:00

    倒了三辈子的霉,当上了程序员。啥派就别管它了,因为啥派都不光鲜。

  39. 您好[未注册用户]
    *.*.*.*
    链接

    您好[未注册用户] 2008-08-12 11:54:00

    您好!
    请教您一个问题,先谢过!
    我们打算做一个网站也采用图片服务器和web服务器分离的方式。但现在还不清楚一些细节。
    1。web服务器中的程序只能把图片上传到本机吧,不能直接上传到图片服务器吧?
    2。如果只能先把图片上传到本机,怎么实现将新上传的图片同步到图片服务器上?
    谢谢!

  40. 老赵
    admin
    链接

    老赵 2008-08-12 12:28:00

    @您好
    最简单的方式就是直接存进图片服务器

  41. JimLiu
    *.*.*.*
    链接

    JimLiu 2008-08-13 22:57:00

    我坚信永远不能忽略基础的核心地位

  42. MarkLV[未注册用户]
    *.*.*.*
    链接

    MarkLV[未注册用户] 2008-08-18 01:14:00


    Master:

    跟着您的博客一起成长, Master。。

    --熊猫,也许是因为乌龟看见熊猫的体型和老虎相差无几,才认定他就是龙斗士。



  43. wz2zf[未注册用户]
    *.*.*.*
    链接

    wz2zf[未注册用户] 2008-08-21 08:57:00

    挺佩服老赵,小小年纪成就很大,很不错的一个人啊
    不但在编程方面造诣匪浅,现在文章写的也是很有味道!,不错,继续顶你!

  44. cloudgamer
    *.*.*.*
    链接

    cloudgamer 2008-08-21 20:51:00

    厉害

  45. Bluer
    *.*.*.*
    链接

    Bluer 2008-08-29 14:47:00

    --引用--------------------------------------------------
    volnet(可以叫我大V): 其实在很多时候“排错”并没有什么妙法,唯“仔细”二字。
    追求梦想的过程能够带来成长,能够让你找到新的梦想。

    这两句太有价值了~收藏
    --------------------------------------------------------

  46. lauralxj[未注册用户]
    *.*.*.*
    链接

    lauralxj[未注册用户] 2008-09-04 19:53:00

    名稱 'Chinese Simple' 包含對文化特性或區域而言無效的字元。
    參數名稱: name
    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.ArgumentException: 名稱 'Chinese Simple' 包含對文化特性或區域而言無效的字元。
    參數名稱: name

    開發環境:Microsoft Visual Web Developer 2008 Express Edition sp1
    我在繁體操作系統下寫的代碼個別中文是用簡體字寫的,不知道什麽原因突然就這樣了,希望指教!謝謝!

  47. 杜耀辉
    *.*.*.*
    链接

    杜耀辉 2008-09-10 16:33:00

    基本功 俺还差远了

  48. jameshe
    *.*.*.*
    链接

    jameshe 2008-09-15 17:39:00

    有事求救于老赵:
    本机上一个WebSite项目,页面使用了Frameset,在左框架通过TreeView链接指向页面:http://localhost:1889/test/order/OrderList.aspx" target="_new">http://localhost:1889/test/order/OrderList.aspx,ie就会弹出Internet Explorer无法打开站点http://localhost:1889/test/,点击“确定”后页面无内容显示。要是直接在地址栏输入URL(http://localhost:1889/test/order/OrderList.aspx" target="_new">http://localhost:1889/test/order/OrderList.aspx),则一切正常。
    另外,在firefox下访问站点也一切正常,首先我没有在页面上使用JS,排除JS出bug的可能,Debug断点跟踪,发现只要是该页面GridView绑定数据源,就会出这个弹出框错误,数据源是一个使用了Group by的SQL产生的DataSet,查询出来的数据也一切正常,百思不得其解,请问老赵有没有遇到类似的问题,可能的错误在哪里?
    万分感谢!

  49. 路人甲2345[未注册用户]
    *.*.*.*
    链接

    路人甲2345[未注册用户] 2008-09-23 14:39:00

    一个开发环境就过去了?你这样也叫学术派?名不符实点了吧?
    看国外的文章应该有的吧?有你这样的么?
    工程管理?编辑器?编译器?引用链接管理?拜托!
    没看你的BLOG还以为你真的很牛。

  50. Steven Chen
    *.*.*.*
    链接

    Steven Chen 2008-09-27 09:10:00

    Debug小组的所有成员对Pdb的运行方式和作用应该都很清楚。

  51. Little Snail
    *.*.*.*
    链接

    Little Snail 2008-10-05 22:45:00

    seems young, why call you ‘老赵’

  52. newos
    *.*.*.*
    链接

    newos 2008-11-09 11:00:00

    理论带来的理论是实践无法达到的,但是没有理论实践就没有真正的理论

  53. CheDan[未注册用户]
    *.*.*.*
    链接

    CheDan[未注册用户] 2008-11-13 22:39:00

    兄弟,好为人师不好

  54. LilyBu[未注册用户]
    *.*.*.*
    链接

    LilyBu[未注册用户] 2008-11-14 10:24:00

    相对于只是干巴巴的放一个demo就做为一个blog,我更希望看到的是附加剖析为什么这样做的原理性描述,并且加以旁征博引 附加相关链接。很多国外的blog就是这样做的

    毕竟授人以鱼不如授人以渔麽。这句话是这么写的吧,哈哈。

  55. 老赵
    admin
    链接

    老赵 2008-11-14 10:28:00

    @LilyBu
    你在对我说吗?你是在说我哪篇blog?别国外国内的,好像我们写的多么不堪一样。

  56. 王立斌
    *.*.*.*
    链接

    王立斌 2008-12-12 10:13:00

    学术派又如何,干嘛太在乎别人怎么看自己呢。正如一句话所说的:“人在江湖却潇洒自如,因为我不在乎”。

  57. zzuyongp[未注册用户]
    *.*.*.*
    链接

    zzuyongp[未注册用户] 2008-12-16 11:47:00

    如果仅仅是做。net应用的, 我们一定需要精通机器码吗?--我看未必,不同层次,不同阶段的程序员,掌握的层次就应该不一样,如果都精通,可能么?程序员之间还有差别么?

    我说得确实过于极端了。
    其实我只是希望老赵不要要求一个代码工人去精通机器码。

    无论如何还是感谢你为程序员做的贡献。

  58. zzfff[未注册用户]
    *.*.*.*
    链接

    zzfff[未注册用户] 2008-12-21 21:06:00

    完全是吹牛文章。有本事就写Visual Studio Extensibility

  59. aojdfoemf[未注册用户]
    *.*.*.*
    链接

    aojdfoemf[未注册用户] 2009-08-03 16:36:00

    说到了“模板”,这其实又是“开发环境”的概念。我们在VS中选择New Item或New Project时,可以在谈出窗口的左边找到模板的分类
    中的“谈出窗口”应修改为“弹出窗口”

  60. cnblogswu[未注册用户]
    *.*.*.*
    链接

    cnblogswu[未注册用户] 2009-09-05 19:30:00

    如果博主去当老师就好了,能培养出好多人才啊

  61. WE.小神[未注册用户]
    *.*.*.*
    链接

    WE.小神[未注册用户] 2009-09-27 13:39:00

    不知道什么时候才有水平去读懂赵老师的文章

  62. 老赵
    admin
    链接

    老赵 2009-09-27 13:43:00

    @WE.小神
    哪里不懂呢?

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我