本来自己是要做android和ios项目。最近公司却分配了一个asp.net的项目任何给我,先给了一个asp.net项目源文件给我,要我看。
我是从c#学起的,不过还好,有java和jsp的基础,看起来还不算很吃力。但是东西学完,第一件事就是打开公司给的项目源文件。却发现公司给的文件很奇怪,不仅用vs2010打开,只看到其中的dll文件相关的头文件。看不到主程序代码。公司里暂时只有我会做asp.net,没办法,只能自己解决。
我想到的就是在客户那边,这个项目可以运行,也就是说iis应该可以发布网站,果然iis新建应用程序池、新建虚拟目录之后,就可以打开这个网站了。但是我要看明白,最好能够直接在源代码上做测试。我开始想办法把项目做成可以在vs2010上打开。首先,既然可以在iis上发布,说明代码本身应该是没有问题的,应该是工程的设置问题。
于是我新建了一个c# empty web application工程, 把原来的代码全部拷贝到新建的文件夹上。直接在文件夹上过来拷贝的文件,没有直接显示到vs2010中。查了资料,才知道要点击shows all files按钮,显示所有文件,才能显示出该文件夹下所有文件。
但是这样在aspx.cs文件上还有提示编译错误。错误在using语句,是dll文件里面的类找不到。网上都说只要把dll文件放到bin文件夹就可以引用到,但是我引用不到。找了很久资料,都没有结果。在我有点心灰意冷的时刻,突然发现工程里面按show all files按钮之后,一些按钮是白色的,并不是正常的黄色的。于是我就查这个现象,我本来以为这个是个很明显的问题,应该很多人遇到吧,却发现相关资料很少。找了好一会,才找到一个说,可以右击文件夹,然后点击include in project按钮。本来只是以一个试试的心态,想不到真的有效果。
带着上一个成功,我动力好像变大了,但是问题还是存在。这次很快,就找到,原来还需要在工程中右击add reference来添加dll文件。虽然操作和网上说的:“只要把dll放到bin就可以使用”,这个说法相悖,但毕竟有效果了。using语句没有提示错误了。但是运行debug,却很多错误提示,提示很多找不到类异常,发现都指向App_Code文件夹下的cs文件。
我记得又花了2个钟去搜问题,这次这个问题几乎完全搜不到网上有人遇到类似的问题。也是在偶然间,看到一篇文章说到把“操作事件”属性设置为编译。我要尝试一下,却发现我的英文版,文件属性上没有操作属性这栏,比较了一下,中英文都是4个属性,最接近“操作事件”的英文是“build action”,发现选项的确是一样的,应该是中英文版的这两个按钮的位置不一样。把文件的这个属性设置为compile(编译)之后,其他文件的编译错误又减少了。后来用类似的方法,发现axps.cs文件需要设置“build action”属性为embeded resource才行。
终于发现vs上再也没有看到恼人的编译错误了。但是start without debug一下,却发现抛出了一个奇怪的异常,也就是标题上的异常:
The type 'xxx' exists in both '.../项目名.dll' and '.../App_Code.0qkogcke.dll'
这个是我处理得最辛苦的异常。从英文描述来看,就是windows路径上了两个dll文件里面有相同的类,vs不知道应该解释为哪个类,导致错误。
这个错误只有英文资料,没有任何中文资料。
如果有人遇到可以参考这个网址,有很多人都有不同的解决办法:http://www.sellsbrothers.com/Posts/Details/1995
上面大概有7、8种解决办法,我是一个一个解决办法的尝试下来,最后是按照一种一个人的说法:新建一个web site,然后把原来的代码全部拷贝过来。居然发现不用再修改任何的配置,就可以直接start without debug打开了。而且运行正常。
这个解决方法的关键是:web application和web site究竟有什么不同。我暂时只看到新建这两种项目的空项目的时候:
web application会新建出好几个文件夹:
web site新建出来只有一个文件:
从文件来分析:
(1)web site是最简单的项目,只有一个web.config文件。而web application中的bin文件夹,用于存放加载的dll文件;obj文件夹暂不清楚;properties文件夹存放项目的说明数据:AssemblyInfo.cs文件。另外还有.csproj文件和csproj.user文件。这些文件夹主要应该是跟文件组织和debug相关的。
也就是说,web application比web site多了一些debug的单元和文件组织的功能。
(2)但是从The type 'xxx' exists in both '.../项目名.dll' and '.../App_Code.0qkogcke.dll'这个错误来看,web application至少还有生成项目的dll的作用,而且还在两个地方同时生成了两个文件名不同的dll文件。这其中的原来是什么暂时也不知道。
asp.net和jsp查找问题,最大的不同就是网上的jsp的资料真的比较多,特别是针对eclipse来开发jsp和ssh的资料。但是相对而言,asp.net的问题,却没有那么丰富。这个其实是一个比较奇怪的现象,我曾经想过自己做一个jsp的网站,但是发现jsp的网站空间比asp/asp.net/php的都贵。也就是说,个人开发成本来开,应该更多人会选择asp.net才对,但是事实上,asp.net的资料却不一定比jsp多。
总结了一大堆问题,还有很多还没有解决的问题。这次的问题解决办法非常简单,我却花了很多时间,究其原因,其中一个就是网上asp.net的资料和讨论都相对比较少。很希望这个文章可以帮到一些人。希望其他人不会像我这样走了这么多弯路。也希望知道我还没知道的答案的高手们赐教。