“CS1595: 已在多處定義”錯誤詳解

來源:互聯網
上載者:User
我最近又找到了一個方法,可能是最簡單,而且最有效。

就是把所有命名空間名稱改掉,只要和原來不一樣就可以。

發現這個也是在沒有辦法的情況最壞的辦法,沒想到是最有效。我基本上把下面的方法都試過了,還是不行,許可權配置也都改了,也不行,我覺得以下的方法只能參考,因為我們平常都是做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 服務,則不要使用此方法。 狀態這種現象是設計使然。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.