2013-01-02 42 views
11
[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)); 
     } 
    } 
} 

Đây là mã của tôi được cho là chạy trước Application_start trong global.asax. Tôi đã nâng cấp dự án web của mình từ mvc 3 lên mvc 4. Vì vậy, Trong quá trình đó, tôi đã phạm sai lầm trong không gian tên. Điều này đã được làm việc trước khi tôi sửa chữa không gian tên của tôi. Nó không còn hoạt động nữa. Tôi đặt lại iis/flushed dns/xây dựng lại giải pháp/loại bỏ các tập tin .net tạm thời trong C: \ Windows \ Microsoft.NET \ Framework64 \ versionxxxxxx ... \ Temporary ASP.NET Files \ root. Không có gì hiệu quả. Am i thiếu cái gì ở đây? Phương thức Initialize() có tất cả các công cụ phân giải phụ thuộc vào bản đồ cấu trúc của tôi. Vì vậy, tôi không thể tiến lên mà không tìm ra điều này. Đã cố gắng để chẩn đoán vấn đề trong nhiều giờ và tôi cần giúp đỡ.WebActivator.PreApplicationStartMethod không hoạt động

Trả lời

20

Nếu mã của bạn là bên trong mỗi Trang Web Project (ví dụ, trong thư mục App_Code), bạn không thể sử dụng PreApplicationStartupMethod! Thay vào đó, bạn có thể sử dụng PostApplicationStartupMethod. Phương thức "Pre" thực hiện trước khi global.asax * Application_Start * chạy, trong khi "Post" thực hiện sau.

Tôi đã lãng phí một hoặc hai giờ trước khi tôi tìm ra điều này, vì vậy hy vọng điều này sẽ giúp người khác tránh điều đó!

0

Với WebActivator phiên bản 1.5.3, file MyClass.cs.pp không thể chỉ sống trong App_Start thư mục, nhưng phải sống trong content\App_Start thư mục để cho nuget install để tạo ra các tập tin chuyển đổi trong App_Start của dự án mục tiêu.

Điều này là không có giấy tờ, theo như tôi có thể biết.

Chú ý: Giải pháp này dường như làm việc quá lâu như .nupkg có xuất xứ được xây dựng bằng nuget pack sử dụng một cách tiếp cận hệ thống tập tin thông thường, nhưng KHÔNG khi sử dụng nuget pack nhắm một .csproj tập tin cụ thể.

0

Kinh nghiệm của tôi là WebActivator sẽ không hoạt động nếu thiết lập dự án của bạn (trong .csproj.user hoặc .vbproj.user) có thiết <StartAction>NoStartPage</StartAction> việc sửa chữa là để thiết lập nó để <StartAction>CurrentPage</StartAction> và nó sau đó sẽ làm việc lần sau khi bạn gỡ lỗi.

Cũng vì nó nằm trong tệp .user (thường không được bao gồm trong svn), rất khó để xác định lý do tại sao nó hoạt động trên một số môi trường dev chứ không phải các môi trường khác.

0

Đối với tôi, vấn đề tôi gặp phải khi tạo kho lưu trữ NuGet riêng bằng NuGet.Server tải xuống (nó sử dụng thuộc tính WebActivatorEx PreApplicationStartMethod).

Điều tôi đã làm là tạo một dự án Trang web trống. Điều này không chính xác: nó cần phải là một dự án trống của dự án ứng dụng. Một khi tôi đã tạo ra ứng dụng web rỗng và cài đặt lại NuGet.Server, mọi thứ đều hoạt động tốt.

Vì vậy: Nếu bạn đã sử dụng một dự án Trang web trống, đó có thể là lý do tại sao bạn gặp sự cố. Thay vào đó, hãy sử dụng dự án Ứng dụng web trống.

Tôi đang nghĩ rằng dự án Trang web trống thiếu một số "keo" ASP.NET cho phép System.Web.PreApplicationStartMethod (được sử dụng bởi WebActivatorEx) để hoạt động. Có lẽ ai đó biết nhiều hơn một chút chi tiết có thể giải thích tại sao điều này là?

0

Sự cố của tôi đã gấp hai lần.

1) không khai báo đường dẫn đầy đủ để loại

2) đặt thuộc tính bên trong namespace, không phải trước

Khi tôi cố định cả hai nó làm việc.

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


namespace MyApp.Api.Controllers 
{ 

    public class MyController : ApiController 
    { 
     public static void AutoMapperStart() 
     { 
      MyMapperConfig.DefineMappings(); 
     } 
    } 
} 
+0

Tuyên bố sử dụng không phù hợp với bạn? – eaglei22

+0

Bất kể sửa lỗi nào không hiệu quả đối với tôi .. – eaglei22