我似乎以与您类似的方式使用 Umbraco,将其包装为 MVC 4 项目。因此,它变成了“VS Web 应用程序”而不是“VS 网站”。
重要的是要记住,Umbraco 最初并不是作为应用程序运行的,而且 Umbraco 中的许多功能首先是针对使用 App_Code 的。
Umbraco.Core 中的内部类 AssemblyExtensions、PluginManager、TypeHelper 和公共类 TypeFinder 具有依赖于 App_Code 文件夹存在的方法。即使您的解决方案中不需要 App_Code,Umbraco 也需要,如果您不想看到它,只需将其从您的解决方案中隐藏即可。如果您真的不希望它删除源中对它的所有引用并创建您自己的 Umbraco 编译。
==在下面编辑==
在阅读了您的评论并再次发布后,我为您的问题创建了一个小解决方案。Umbraco 创建 App_Code 的事实仍然是因为没有 App_Code 存在的框架初始化将无法工作。但是,正如 OP 指出的那样,重新编译和创建自己的 Umbraco 分布会在升级等时产生一些额外的维护。
允许 Umbraco 创建 App_Code 文件夹,但在应用程序初始化时也将其删除,这不是处理此问题的理想但最干净的方法。我会使用 IApplicationEventHandler。示例代码适用于我的盒子。
using Umbraco.Core;
using Umbraco.Core.IO;
namespace YourNamespace.EventHandlers
{
public class AppCodeEvents : IApplicationEventHandler
{
public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{ }
public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{ }
public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
if (System.IO.Directory.Exists(IOHelper.MapPath(IOHelper.ResolveUrl("~/App_Code"))))
{
System.IO.Directory.Delete(IOHelper.MapPath(IOHelper.ResolveUrl("~/App_Code")));
}
}
}
}