WebActivator.PreApplicationStartMethod ไม่ทำงาน

[assembly:  WebActivator.PreApplicationStartMethod(typeof(MyApp.App_Start.StructureMapMvc), "Start")]

namespace MyApp.App_Start
{
    public static class StructureMapMvc
    {
        public static void Start()
        {
            var container = IoC.Initialize();
            DependencyResolver.SetResolver(new SmDependencyResolver(container));
        }
    }
}

นี่คือโค้ดของฉันที่ควรรันก่อน Application_start ใน global.asax ฉันกำลังอัปเกรดโครงการเว็บของฉันจาก mvc 3 เป็น mvc 4 ดังนั้นในกระบวนการนั้น ฉันทำผิดพลาดในเนมสเปซ สิ่งนี้ใช้งานได้ก่อนที่ฉันจะแก้ไขเนมสเปซของฉัน ตอนนี้มันใช้งานไม่ได้แล้ว ฉันรีเซ็ต iis/flush dns/ โซลูชันที่สร้างใหม่/ลบไฟล์ .net ชั่วคราวใน C:\Windows\Microsoft.NET\Framework64\versionxxxxxx...\Temporary ASP.NET Files\root ไม่มีอะไรทำงาน ฉันพลาดอะไรบางอย่างที่นี่หรือเปล่า? เมธอด Initialize() มีวิธีการแก้ไขการพึ่งพาสิ่งแผนที่โครงสร้างของฉันทั้งหมด ดังนั้นฉันจึงไม่สามารถก้าวไปข้างหน้าโดยไม่เข้าใจสิ่งนี้ พยายามวินิจฉัยปัญหาเป็นเวลาหลายชั่วโมงและฉันต้องการความช่วยเหลือ


person Maneeshpal    schedule 02.01.2013    source แหล่งที่มา


คำตอบ (5)


หากรหัสของคุณอยู่ใน โครงการเว็บไซต์ (เช่น ใต้โฟลเดอร์ App_Code) คุณจะไม่สามารถใช้ PreApplicationStartupMethod ได้! คุณสามารถใช้ PostApplicationStartupMethod แทนได้ เมธอด "Pre" จะดำเนินการก่อนที่ global.asax *Application_Start* จะทำงาน ในขณะที่ "Post" จะดำเนินการหลังจากนั้น

ฉันเสียเวลาไปหนึ่งหรือสองชั่วโมงกว่าจะคิดได้ ดังนั้นหวังว่านี่จะช่วยให้คนอื่นหลีกเลี่ยงได้!

person kenchilada    schedule 13.03.2013

ประสบการณ์ของฉันคือ WebActivator จะไม่ทำงานหากการตั้งค่าโครงการของคุณ (ใน .csproj.user หรือ .vbproj.user) มีการตั้งค่า <StartAction>NoStartPage</StartAction> การแก้ไขคือตั้งค่าเป็น <StartAction>CurrentPage</StartAction> และควรจะใช้งานได้ในครั้งต่อไปที่คุณแก้ไขจุดบกพร่อง

นอกจากนี้เนื่องจากมันอยู่ในไฟล์ .user (ซึ่งโดยทั่วไปจะไม่รวมอยู่ใน svn) จึงเป็นการยากที่จะระบุได้ว่าเหตุใดจึงทำงานในสภาพแวดล้อม dev บางอย่าง แต่ไม่ใช่กับสภาพแวดล้อมอื่น ๆ

person Seph    schedule 19.05.2013

ด้วย WebActivator เวอร์ชัน 1.5.3 ไฟล์ MyClass.cs.pp ไม่สามารถอยู่ในโฟลเดอร์ App_Start ได้ แต่ต้องอยู่ในโฟลเดอร์ content\App_Start เพื่อให้ nuget install สร้างไฟล์ที่แปลงแล้วใน App_Start ของโปรเจ็กต์เป้าหมาย

สิ่งนี้ไม่มีเอกสารเท่าที่ฉันสามารถบอกได้

หมายเหตุ: ดูเหมือนว่าโซลูชันนี้จะใช้ได้ผลตราบใดที่ .nupkg ต้นทางถูกสร้างขึ้นโดยใช้ nuget pack โดยใช้วิธีการระบบไฟล์แบบเดิมๆ แต่ ไม่ เมื่อใช้ nuget pack ที่กำหนดเป้าหมายไปที่ไฟล์ .csproj ที่เฉพาะเจาะจง

person TimDog    schedule 04.01.2013

สำหรับฉัน ปัญหาที่ฉันมีคือเมื่อสร้างพื้นที่เก็บข้อมูล NuGet ส่วนตัวโดยใช้การดาวน์โหลด NuGet.Server (มันใช้แอตทริบิวต์ WebActivatorEx PreApplicationStartMethod)

สิ่งที่ฉันทำคือสร้างโครงการเว็บไซต์เปล่า สิ่งนี้ไม่ถูกต้อง: ต้องเป็นโปรเจ็กต์ Application บนเว็บที่ว่างเปล่า เมื่อฉันสร้าง Empty Web Application และติดตั้ง NuGet.Server ใหม่ ทุกอย่างทำงานได้ดี

ดังนั้น: หากคุณใช้โครงการ Empty Web Site นั่นอาจเป็นสาเหตุที่ทำให้คุณประสบปัญหา ใช้โครงการ Empty Web Application แทน

ฉันคิดว่าโครงการ Empty Web Site ขาด "กาว" ของ ASP.NET บางส่วนซึ่งทำให้ System.Web.PreApplicationStartMethod (ตามที่ WebActivatorEx ใช้) ทำงานได้ บางทีคนที่รู้รายละเอียดเพิ่มเติมอีกเล็กน้อยอาจอธิบายได้ว่าทำไมถึงเป็นเช่นนั้น

person Julian    schedule 12.11.2014

ปัญหาของฉันคือสองเท่า

1) ไม่ประกาศเส้นทางแบบเต็มไปยังประเภท

2) วางแอตทริบิวต์ไว้ในเนมสเปซ ไม่ใช่ก่อนหน้า

เมื่อฉันแก้ไขทั้งสองสิ่งนี้แล้วมันก็ใช้งานได้

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyApp.Api.Controllers.MyController), "AutoMapperStart")]


namespace MyApp.Api.Controllers
{

    public class MyController : ApiController
    {
        public static void AutoMapperStart()
        {
            MyMapperConfig.DefineMappings();
        }
    }
}
person Kildareflare    schedule 05.11.2015