WebActivator.PreApplicationStartMethod tidak berfungsi

[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));
        }
    }
}

Ini kode saya yang seharusnya dijalankan sebelum Application_start di global.asax. Saya sedang mengupgrade proyek web saya dari mvc 3 ke mvc 4. Jadi, dalam proses itu, saya membuat kesalahan di namespace. Ini berfungsi sebelum saya memperbaiki namespace saya. Ini tidak lagi berfungsi sekarang. Saya mengatur ulang iis/flushed dns/membangun kembali solusi/menghapus file .net sementara di C:\Windows\Microsoft.NET\Framework64\versionxxxxxx...\Temporary ASP.NET Files\root. Tidak ada yang berhasil. Apakah saya melewatkan sesuatu di sini? Metode Initialize() memiliki semua hal resolusi ketergantungan hal peta struktur saya. Jadi, saya tidak bisa bergerak maju tanpa memikirkan hal ini. Mencoba mendiagnosis masalah selama berjam-jam dan saya butuh bantuan.


person Maneeshpal    schedule 02.01.2013    source sumber


Jawaban (5)


Jika kode Anda berada dalam Proyek Situs Web (yaitu, dalam folder App_Code), Anda tidak dapat menggunakan PreApplicationStartupMethod! Anda dapat menggunakan PostApplicationStartupMethod sebagai gantinya. Metode "Pra" dijalankan sebelum global.asax *Application_Start* dijalankan, sedangkan "Posting" dijalankan setelahnya.

Saya menyia-nyiakan satu atau dua jam sebelum saya menemukan jawabannya, jadi semoga ini akan membantu orang lain menghindarinya!

person kenchilada    schedule 13.03.2013

Pengalaman saya adalah WebActivator tidak akan berfungsi jika pengaturan proyek Anda (di .csproj.user atau .vbproj.user) memiliki pengaturan <StartAction>NoStartPage</StartAction> perbaikannya adalah dengan mengaturnya ke <StartAction>CurrentPage</StartAction> dan itu akan berfungsi saat Anda melakukan debug berikutnya.

Juga karena ini ada dalam file .user (yang biasanya tidak disertakan dalam svn) sulit untuk menentukan mengapa ini berfungsi pada beberapa lingkungan pengembang tetapi tidak pada yang lain.

person Seph    schedule 19.05.2013

Dengan WebActivator versi 1.5.3, file MyClass.cs.pp tidak bisa hanya berada di folder App_Start, tetapi harus berada di folder content\App_Start agar nuget install dapat membuat file yang diubah di App_Start proyek target.

Sejauh yang saya tahu, ini tidak terdokumentasi.

CATATAN: Solusi ini tampaknya berfungsi selama .nupkg asli dibuat menggunakan nuget pack menggunakan pendekatan sistem file konvensional, namun TIDAK saat menggunakan nuget pack yang menargetkan file .csproj tertentu.

person TimDog    schedule 04.01.2013

Bagi saya, masalah yang saya alami adalah ketika membuat repositori NuGet pribadi menggunakan unduhan NuGet.Server (menggunakan atribut WebActivatorEx PreApplicationStartMethod).

Apa yang saya lakukan adalah membuat proyek Situs Web Kosong. Ini salah: ini harus berupa proyek Aplikasi Web Kosong. Setelah saya membuat Aplikasi Web Kosong dan menginstal ulang NuGet.Server semuanya berfungsi dengan baik.

Jadi: Jika Anda menggunakan proyek Situs Web Kosong, mungkin itulah sebabnya Anda mengalami masalah. Gunakan proyek Aplikasi Web Kosong sebagai gantinya.

Saya pikir proyek Situs Web Kosong kehilangan beberapa "lem" ASP.NET yang memungkinkan System.Web.PreApplicationStartMethod (seperti yang digunakan oleh WebActivatorEx) berfungsi. Mungkin seseorang yang mengetahui lebih banyak detailnya dapat menjelaskan mengapa hal ini terjadi?

person Julian    schedule 12.11.2014

Masalah saya ada dua.

1) tidak mendeklarasikan path lengkap ke tipe tersebut

2) menempatkan atribut di dalam namespace, bukan sebelumnya

Setelah saya memperbaiki keduanya, itu berhasil.

[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