发布ASP.NET MVC/AngularJS应用程序

发布ASP.NET MVC/AngularJS应用程序,angularjs,asp.net-mvc,iis-7.5,Angularjs,Asp.net Mvc,Iis 7.5,我正在开发一个带有AngularJS前端的ASP.NET MVC应用程序,它在从visual studio/iis express运行时工作得很好,但在我尝试发布它以便其他用户可以访问它时(例如,在浏览器中导航到)效果不太好。我在服务器上配置了IIS,以便指向“应用程序”文件夹,其结构如下: application app areas foundation main layout la

我正在开发一个带有AngularJS前端的ASP.NET MVC应用程序,它在从visual studio/iis express运行时工作得很好,但在我尝试发布它以便其他用户可以访问它时(例如,在浏览器中导航到)效果不太好。我在服务器上配置了IIS,以便指向“应用程序”文件夹,其结构如下:

application
    app
        areas
        foundation
        main
            layout
                layout.html
    bin
    Content
    fonts
    Scripts
    Templates
    Views
        Shared
            _Layout.cshtml
            Index.cshtml
    Logs
    Global.asax
    web.config
将加载初始页面Index.cshtml(在Views/Shared/下),但其中包括:

<div ng-include="'app/main/layout/layout.html'"></div>

返回500.24内部服务器错误

如果我将ng更改为:

<div ng-include="'application/app/main/layout/layout.html'"></div>

然后,发布的应用程序可以工作,但从visual studio/iis express运行它时,在尝试加载layout.html文件时会返回404.0-Not Found响应,我假设是因为在使用iisexpress运行它时没有父“application”文件夹


通过将已发布应用程序文件夹的内容复制到服务器的C:\inetpub\wwwroot文件夹中,我成功地使已发布的应用程序在某一点上工作,但这似乎不是一个合适的解决方案,那么,通知Angular查找此ng include的正确位置的最佳方法是什么呢?

我最后做的是在我的web.config文件中添加一个应用程序路径变量,并在所有ng include或其他URL前面加上应用程序路径,使它们看起来像

<div ng-include="'application/app/main/layout/layout.html'"></div>

然后将我的project Web属性更新为以下内容:


因此,无论我是发布它还是通过Visual Studio运行它,它都在“应用程序”文件夹下运行,并在适当的位置查找html文件。

我最后要做的是在我的web.config文件中添加一个应用程序路径变量,并在我的所有ng include或其他URL前面加上应用程序路径前缀,所以他们看起来像

<div ng-include="'application/app/main/layout/layout.html'"></div>

然后将我的project Web属性更新为以下内容:

因此,无论我是发布它还是通过VisualStudio运行它,它都在“应用程序”文件夹下运行,并在适当的位置查找html文件