คลาสที่อยู่ใน App_Code ไม่สามารถเข้าถึงได้


197

ฉันสร้างเว็บไซต์ใน ASP.NET และสร้างคลาสแล้ววางไว้ในโฟลเดอร์ App_Code อย่างไรก็ตามฉันไม่สามารถเข้าถึงได้จากหน้าอื่น ๆ ของฉัน จำเป็นต้องกำหนดค่าบางสิ่งเพื่ออนุญาตหรือไม่ ฉันได้ทำให้มันทำงานในโครงการก่อนหน้า แต่ไม่ได้อยู่ในนี้อย่างใด

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}

1
ฉันคิดว่าคุณรวมถึง namespace ในหน้าเว็บของคุณหรือไม่
Alex Czarto

1
สำเนาซ้ำที่เป็นไปได้ - stackoverflow.com/questions/409070/…
vapcguy

คำตอบ:


637

คลิกขวาที่.csไฟล์ในApp_Codeโฟลเดอร์และตรวจสอบคุณสมบัติของมัน

ตรวจสอบให้แน่ใจว่า "Build Action" ถูกตั้งค่าเป็น "คอมไพล์"


10
คุณจะตั้งค่าสิ่งนี้เป็นการกระทำเริ่มต้นของการสร้างได้อย่างไร หรือฉันต้องทำอย่างนั้นกับไฟล์ทุกไฟล์ในโฟลเดอร์ App_Code หรือไม่
มาลาคี

3
เหตุใดฉันจึงไม่สามารถทำได้ใน Visual Studio 2012
RSK

4
สิ่งนี้ดูเหมือนจะเป็นบั๊กใน VS2012 เกิดขึ้นกับฉันเช่นกัน
เจมส์เล็บ

2
สำหรับผู้ที่ต้องการรายละเอียดเพิ่มเติมคุณสามารถค้นหาได้ที่: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian

3
Yay นี้แก้ไขข้อผิดพลาด 142 ข้อในโครงการ Visual Studio ของฉันขอบคุณมากสำหรับการแบ่งปันวิธีแก้ไขปัญหานี้: -]
Michael G. Workman

14

วางสิ่งนี้ไว้ที่ด้านบนของไฟล์อื่นที่คุณต้องการเข้าถึงคลาส:

using CLIck10.App_Code;

หรือเข้าถึงคลาสจากไฟล์อื่นเช่นนี้:

CLIck10.App_Code.Glob

ไม่แน่ใจว่าเป็นปัญหาของคุณหรือไม่ แต่ถ้าคุณยังใหม่กับ C # นี่เป็นวิธีที่ง่ายในการสะดุด

อัปเดต: ฉันเพิ่งพบว่าถ้าฉันเพิ่มโฟลเดอร์ App_Code ลงในโครงการฉันต้องปิด / เปิด Visual Studio อีกครั้งเพื่อให้รับรู้โฟลเดอร์ "พิเศษ" นี้อย่างถูกต้อง


1
มันเป็นบางสิ่งที่เกี่ยวข้องกับการสร้างแอคชั่นโดยดูจากมัน - คำตอบของ FailBoy แก้ไขปัญหาได้ ขอบคุณสำหรับการตอบกลับเลยล่ะค่ะ :)
มาลาคี

เป็นคนดีที่ทำงานเมื่อฉันเพิ่ม namespace ให้กับชั้นเรียนในโฟลเดอร์ App_Code
mashtheweb

ทำไมเราต้องรวม namspace แบบนั้นด้วย? ทำไม intelliSense ไม่สามารถเข้าถึงคลาสนั้นได้โดยไม่ต้องระบุชื่อโฟลเดอร์
Elham Kohestani

10

ไปที่เพจที่คุณต้องการเข้าถึงคลาส App_code จากนั้นเพิ่มเนมสเปซของคลาส app_code คุณต้องระบุusingคำสั่งดังนี้:

using WebApplication3.App_Code;

หลังจากนั้นคุณจะต้องไปที่คุณสมบัติคลาส app_code และตั้งค่า 'Build Action' เป็น 'รวบรวม'


4

ตรวจสอบให้แน่ใจว่าคุณใช้เนมสเปซเดียวกันกับเพจของคุณ


1
แต่ทำไมเมื่ออยู่ใน APP_CODE ฉันคิดว่าทุกอย่างในคลาสสาธารณะนั้นควรได้รับการเปิดเผยตลอดการแก้ปัญหาโดยอัตโนมัติ!?
Fandango68

4

ฉันยังไม่เข้าใจสาเหตุที่เกิดขึ้น แต่ฉันมีคลาสที่อยู่ในApp_Codeโฟลเดอร์ของฉันที่เรียกวิธีการในกันและกันและทำได้ดีเมื่อฉันสร้างโครงการ. NET 4.5.2 แต่ฉันต้อง เปลี่ยนกลับเป็น 4.0 เนื่องจากเซิร์ฟเวอร์เป้าหมายไม่ได้รับการอัพเกรด นั่นคือเมื่อฉันพบปัญหานี้ (หลังจากแก้ไขlangversionใน web.config ของฉันจาก 6 ถึง 5 ... เรื่องอื่น) ...

หนึ่งในวิธีการของฉันยังคงมีข้อผิดพลาดเช่น:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

คลาสทั้งหมดของฉันถูกตั้งค่าเป็น "คอมไพล์" ในคุณสมบัติตามที่แนะนำบนคำตอบที่ยอมรับได้ที่นี่และแต่ละคนมีเนมสเปซทั่วไปที่เหมือนกันและแต่ละอันก็มี using MyNamespace;ที่ด้านบนของแต่ละชั้นเรียน

ฉันพบว่าถ้าฉันเพิ่งย้ายชั้นเรียนที่ละเมิดที่ต้องเรียกวิธีการในแต่ละอื่น ๆ โฟลเดอร์มาตรฐานชื่อสิ่งอื่นที่ไม่ใช่ "App_Code" พวกเขาหยุดมีปัญหาความขัดแย้งนี้

หมายเหตุ : หากคุณสร้างโฟลเดอร์มาตรฐานที่ชื่อว่า "AppCode" ให้ย้ายคลาสของคุณไปที่นั้นลบโฟลเดอร์ "App_Code" แล้วเปลี่ยนชื่อเป็น "AppCode" เป็น "App_Code" ปัญหาของคุณจะกลับมา ไม่สำคัญว่าคุณจะใช้ตัวเลือก "New Folder" หรือ "Add ASP .NET Folder" เพื่อสร้าง "App_Code" ดูเหมือนว่าจะใส่ชื่อ

บางทีนี่อาจเป็นเพียงปัญหา. NET 4.0 (และอาจเป็นไปได้ก่อนหน้านี้) ... ฉันทำได้ดีใน 4.5.2 ก่อนที่จะเปลี่ยนกลับ!


0

ฉันพบว่าการย้ายไฟล์ไปไว้ในโครงการ Class Library แยกต่างหากจากนั้นอ้างอิงโครงการนั้นในโครงการเว็บและใช้เนมสเปซในusingส่วนของไฟล์ ด้วยเหตุผลบางอย่างการแก้ปัญหาอื่น ๆ ก็ไม่ได้ผลสำหรับฉัน แต่วิธีนี้แก้ไขได้


0

ในกรณีของฉันฉันไม่สามารถสร้างโปรเจ็กต์ด้วยคลาสที่กำหนดไว้ในโฟลเดอร์ App_Code

ไม่สามารถจำลองสถานการณ์ได้อย่างแม่นยำเพื่อแสดงความคิดเห็น แต่ต้องปิดและเปิดสตูดิโอภาพขึ้นใหม่เพื่อให้ระบบ Intellisense ร่วมมือ ...

ฉันสังเกตว่าเมื่อคลาสในโฟลเดอร์ App_Code ถูกตั้งค่าเป็น 'คอมไพล์' แทน 'เนื้อหา' (คลิกขวา) ว่าข้อผิดพลาดมาจากคลาสรุ่นที่สอง ... มองไปทางซ้ายสุดของ 3 จาก 3 ฟิลด์ระหว่างบานหน้าต่างโค้ดและแท็บ หนึ่ง 'อื่น ๆ ' ถูกเรียกบางอย่างตามแนวของ 10_App_Code หรือคล้ายกัน

เพื่อแก้ไขปัญหาฉันเปลี่ยนชื่อโฟลเดอร์จาก App_Code เป็น Code ตั้งค่า namespaces อย่างชัดเจนบนคลาสและตั้งค่าคลาสทั้งหมดเป็น 'คอมไพล์'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.