编译器错误信息: CS1595: 已在多处定义

在测试从网上下来的一个asp.net(c#+access)的留言板项目时出现如下错误:

“/guestbook”应用程序中的服务器错误。
——————————————————————————–

编译错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误信息: CS1595: 已在多处定义“feng.admin”;使用“c:/WINDOWS/Microsoft.NET/Framework/v1.1.4322 /Temporary ASP.NET Files/guestbook/0bb79cfc/44d19467/z0cf60h3.dll”中的定义

在网上找了很久,说法当然会有很多,能真正解决我这里遇到问题的当然只有一个.

网上搜集到的说法:

1.将工程目录下的/bin目录下的dll都删掉,将c:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files这个临时目录下的文件清除掉,然后重新运行.

2.与运行权限有关,如电脑用户等.

3.在.aspx源文件中第一行有如下语句(only for demo):

<%@ Page Language=”C#” ContentType=”text/html” ResponseEncoding=”gb2312″ Inherits=”feng.admin” Src=”admin.cs” AutoEventWireup=”true” %>

注意Src=”admin.cs”这一句哦~它就是问题之所在.

因为接触.net这方面不久,也不敢妄言什么,且摘引原解决方案提供者菜菜的BLOG–Asp.net的话来说吧:

大家在做没有后置代码的程序时,并没有对程序进行编译,也能执行出来不是吗?但不编译后台的代码怎么执行呢?其实是 asp.net的引擎自动的进行了动态编译。对于SRC属性,是告诉asp.net引擎这个页面有个某某后置代码需要动态编译。也就是说,当你建立一个 aspx文件,和一个对应的cs或者vb文件,只要有这个属性,你不需要自己一个一个编译dll就能正常执行。如果各位看官很闲,可以先试验一下。
然后问题来了,我想你一定没有在放aspx文件的目录里发现bin目录和下面的DLL。那么。这个后置代码编译的结果跑哪里去了?看到之前图片的错误提示里的路径了没?c:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/,就是这里了。
我想各位也知道编译以后的asp.net程序是会生成bin目录,并在这个目录下有个DLL的,asp.net引擎也会在这里查找所需要的程序集。
如果你的程序进行过编译,坏了,asp.net引擎开始头晕了,bin目录下有程序需要的东西,上面所提到的路径下也有,两边都是一样的内容。。我该用哪个?算了,决定不了,我抛个异常吧。。
于是一切就这么发生了。
也就是说,你用scr属性告诉asp.net引擎去动态的自动编译程序,而你自己也编译了一次,这样就在不同的地方出现了相同的东西,可是asp.net引擎会在这两个地方都查找需要的东西,于是就有了冲突。两边都有,不就是多重定义嘛。。
那么原因明白了,解决的办法也是相当的简单了,如果你想自己编译程序呢,就把SRC属性去掉,如果不想去掉src属性呢,就不要自己编译程序了,发布文件的时候,把aspx文件和对应的后置代码文件一起发布,就ok了,哦,别忘记如果编译过,把bin目录删除掉哦~~

我后来在.aspx文件里找了下,发现确实是有sr属性的存在,而/bin目录下又有现成的dll文件,所以应该就可以判断是temp目录下生成的dll与自己提供的dll发生了引用下的未明确帮产生了这个问题.

当然,问题的产生显然并不是只有一种诱因,当遇到这个问题时也不会都是这样产生的,还需要耐心的尝试与寻找.

你可能感兴趣的:(asp.net,dll,Access,vb,引擎,编译器)