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