WebActivator.PreApplicationStartMethod不起作用

时间:2013-01-02 00:12:41

标签: c# asp.net-mvc-4 structuremap

[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()方法具有我的所有结构映射东西依赖解析的东西。所以,如果不把它搞清楚,我就无法前进。试图诊断问题这么多个小时,我需要帮助。

5 个答案:

答案 0 :(得分:22)

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

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

答案 1 :(得分:1)

我的经验是,如果您的项目设置(在WebActivator.csproj.user中)设置为.vbproj.user,那么<StartAction>NoStartPage</StartAction>将无效,修复方法是将其设置为{{ 1}}然后它应该在你下次调试时工作。

此外,由于它位于<StartAction>CurrentPage</StartAction>文件中(通常不包含在svn中),因此很难确定它在某些开发环境中的作用,而不是其他环境。

答案 2 :(得分:0)

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

据我所知,这是没有记录的。

注意:只要使用传统文件系统方法使用.nupkg构建原始nuget pack,但使用{{1}时 NOT ,此解决方案似乎有效}以特定nuget pack文件为目标。

答案 3 :(得分:0)

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

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

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

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

答案 4 :(得分:0)

我的问题是双重的。

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