小草

我是一棵小小草。
posts - 214, comments - 451, trackbacks - 25, articles - 8

“CS1595: 已在多处定义”错误详解

Posted on 2004-11-30 16:00 小草 阅读(7693) 评论(6)  编辑 收藏 网摘 所属分类: 学习笔记

我最近又找到了一个方法,可能是最简单,而且最有效的。
就是把所有命名空间名称改掉,只要和原来不一样就可以。
发现这个也是在没有办法的情况最坏的办法,没想到是最有效的。我基本上把下面的方法都试过了,还是不行,权限配置也都改了,也不行,我觉得以下的方法只能参考,因为我们平常都是做WEB程序,不可能不用到mscorelib.dll。
以下是微软的解释和我的理解


http://support.microsoft.com/?id=318274

PRB:使用 C# 编译器编译 ASP.NET 资源时出现错误信息"编译错误信息:CS1595"

本文的发布号曾为 CHS318274
不管 Web 服务是以 Visual Basic .NET 还是 Visual C# .NET 编写的,Web 服务都使用 C# 编译器编译它们的代理。因此,即使您在使用 Visual Basic .NET 项目,也可能会收到此错误信息。

请注意,如果您在一页中合并 src codebehind 属性,也会收到类似的编译器错误信息。但是,这会被认为是开发人员的错误。如果您遇到本文介绍的特定问题,该错误信息总是会指定 mscorlib.dll 程序集。

卷上的默认访问控制列表授予 Everyone 和 Users 组读取和列出文件的权限。但是,有时会删除这些权限以提供更加安全的环境。如果发生这种情况,Csc.exe 则无法调拨路径名称。由于当前 ASP.NET 未向编译器提供 选项,所以编译器包含了程序集的多个例程。使用 Visual Basic .NET 编译器 (Vbc.exe) 编译资源时不会发生此问题。

本页内容
症状 症状
原因 原因
解决方案 解决方案
状态 状态
更多信息 更多信息
参考 参考

症状

当您使用 C# 编译器 (Csc.exe) 编译 ASP.NET 资源时,可能会收到与以下某条错误信息类似的编译器错误信息:
Compiler Error Message:CS1595:'System.Collections.ArrayList' is defined in multiple places; using definition from 'c:\winnt\microsoft.net\framework\v1.0.3705\mscorlib.dll'
- 或 -
Compiler Error Message:CS1595:'System.Runtime.CompilerServices.CompilerGlobalScopeAttribute' is defined in multiple places; using definition from 'c:\windows\microsoft.net\framework\v1.0.3705\mscorlib.dll'
此问题可能会在第一次尝试运行 Visual C# .NET Web 应用程序或者运行 Microsoft Visual Basic .NET 或 Visual C# .NET Web Service 时发生。

原因

发生此问题是因为 C# 编译器无权访问 mscorlib.dll 程序集的路径中的文件夹。

解决方案

若要解决此问题,请使用下列方法之一(按优先顺序排列)。

方法 1:在 C# 编译器定义中包括 /nostdlib 选项

若要解决此问题,请将 C# 编译器的编译器定义修改为包括 /nostdlib 选项。/nostdlib 选项会禁止导入 mscorlib.dll 程序集,mscorlib.dll 定义于整个 System 名称空间。

若要在计算机上的 C# 编译器定义中包括 /nostdlib 选项,请按照下列步骤操作:
1. 打开 Machine.config 文件,然后找到 <compilers> 部分。
2. 在 C# 的 <compiler> 定义中,添加 compilerOptions 属性,值为 /nostdlib。例如:
<compiler language="c#;cs;csharp"
extension=".cs"
type="Microsoft.CSharp.CSharpCodeProvider, System,
Version=1.0.3300.0,
Culture=neutral,
PublicKeyToken=b77a5c561934e089"
warningLevel="1"
compilerOptions="/nostdlib" />
备注compilerOptions 属性不是增量。如果您需要在 Web.config 文件中或在给定页上忽略此选项,除自定义内容之外,还必须添加 /nostdlib 选项。

备注:不能将此方法用于使用 XmlSerializer 类或 Web 服务的应用程序,因为 XmlSerializer 使用的编译器调用不继承这些选项。

方法 2:为 ASPNET 帐户授予列出权限

要解决此问题,您还可以为下列帐户之一授予"列出文件夹/读取数据"权限: (我认为应该是IIS里的站点目录的权限还有一种可能是% windir %\Microsoft.NET\Framework\ 版本 这个目录,反正我把两个目录都设置了。
ASPNET 帐户。
包括 ASPNET 帐户的组。
进程标识,用于为 mscorlib.dll 程序集路径(通常为 % windir %\Microsoft.NET\Framework\ 版本)中的每个文件夹运行的 ASP.NET 辅助进程。这通常是的卷根目录(例如 C:\),帐户在此没有权限。
备注:如果使用了 /nostdlib 选项,而且没有使用 Web 服务,则不要使用此方法。

状态

这种现象是设计使然。

Feedback

#1楼   回复  引用    

2006-06-05 10:51 by zonebin[未注册用户]
谢谢,改命名空间的方法非常有效

#2楼   回复  引用    

2006-12-20 18:01 by 桥[未注册用户]
thank you,改namespace真的是非常有效啊,

#3楼[楼主]   回复  引用  查看    

2006-12-21 08:10 by 小草      
能帮到你们我也很高兴。欢迎多多交流。

#4楼   回复  引用    

2006-12-23 21:20 by 呵呵[匿名][未注册用户]
删掉不需要的引用,特别是一些重复引用,实在不行就把自己定义的引用全删掉再一个个加就成了

没必要改namespace的

#5楼[楼主]   回复  引用  查看    

2006-12-25 08:37 by 小草      
当然如果删除引用可以解决问题当然最好了

#6楼   回复  引用  查看    

2007-03-29 15:23 by Arlen      
这个法子不错。
我的一个webservice project也出了这个错误,但我是在Global中将命名空间改了一下,编译后,正常运行。再将命名空间改回来就好了。



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 71025




相关文章:

相关链接: