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

这是我的代码应该在global.asax中的Application_start之前运行。 我正在将我的web项目从mvc 3升级到mvc 4.所以,在那个过程中,我在命名空间中犯了一个错误。 这在我更正我的命名空间之前有效。 它现在不再有用了。 我重置了iis / flushed dns / rebuilt solution /删除了C:\ Windows \ Microsoft.NET \ Framework64 \ versionxxxxxx … \ Temporary ASP.NET Files \ root中的临时.net文件。 没有任何效果。 我错过了什么吗? Initialize()方法具有我所有的结构映射东西依赖解析的东西。 所以,如果不解决这个问题,我无法前进。 试图诊断问题这么多个小时,我需要帮助。

如果您的代码位于Web站点项目中 (即,在App_Code文件夹下),则无法使用PreApplicationStartupMethod ! 您可以改用PostApplicationStartupMethod 。 “Pre”方法在global.asax * Application_Start *运行之前执行,而“Post”在执行之后执行。

在我弄清楚之前,我浪费了一两个小时,所以希望这会帮助其他人避免这种情况!

使用WebActivator 1.5.3版, MyClass.cs.pp文件不能只存在于App_Start文件夹中, 而是必须存在于content\App_Start文件夹中,以便nuget install在目标项目的App_Start中创建转换后的文件。

据我所知,这是无证件的。

注意:只要使用传统文件系统方法使用nuget pack构建原始.nupkg ,此解决方案似乎有效,但在使用针对特定.csproj文件的nuget pack时则nuget pack

我的经验是,如果您的项目设置(在.csproj.user.vbproj.user )具有设置NoStartPage则修复程序将其设置为CurrentPageWebActivator将无法工作它应该在下次调试时工作。

此外,由于它位于.user文件中(通常不包含在svn中),因此很难确定它在某些开发环境中的工作原理,而不是其他环境。

对我来说,我遇到的问题是使用NuGet.Server下载创建私有NuGet存储库时(它使用了WebActivatorEx PreApplicationStartMethod属性)。

我所做的是创建一个空网站项目。 这是不正确的:它需要是一个空的Web 应用程序项目。 一旦我创建了空Web应用程序并重新安装了NuGet.Server,一切正常。

所以:如果你使用过一个空网站项目,这可能就是你遇到问题的原因。 请改用空Web应用程序项目。

我认为Empty Web Site项目缺少一些ASP.NET“粘合剂”,它使System.Web.PreApplicationStartMethod(由WebActivatorEx使用)能够工作。 也许知道更多细节的人可以解释为什么会这样?

我的问题是双重的。

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