使用 .net mvc 在 IIS angular 2 应用程序上发布

Posted

技术标签:

【中文标题】使用 .net mvc 在 IIS angular 2 应用程序上发布【英文标题】:Publishing on IIS angular 2 app with .net mvc 【发布时间】:2017-05-22 07:02:36 【问题描述】:

我已经使用 mvc 设置了一个 Angular 2 应用程序。 我在 Visual Studio 中使用 typescript 2.3.1.0。 我安装了节点模块并添加了对 angular 2 的引用。

视图 -> 主页 -> 索引文件 -

@
    ViewBag.Title = "Home Page";

<div class="jumbotron">
    <h1>Angular 2 QuickStart</h1>
</div>
<div class="row">
    <div class="col-md-4">
        <!-- Angular2 Code -->
        <my-app>Loading...</my-app>
        <!-- Angular2 Code -->
    </div>
</div>

我添加了对我的视图的所有引用 -> 共享 -> 布局文件 -

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="google-signin-client_id" content="118134028665-i6h833e7irrrhk0n52bgj7ve6fet4vgr.apps.googleusercontent.com">
    <title>@ViewBag.Title - My ASP.NET Application</title>

    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

    <!-- Angular2 Code -->
    <base href="/">
    <link rel="stylesheet" href="styles.css">
    <!-- Polyfill(s) for older browsers -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script>
    <script src="https://code.angularjs.org/tools/system.js"></script>
    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="systemjs.config.js"></script>
    <script>
      System.import('app').catch(function(err) console.error(err); );
    </script>
    <!-- Angular2 Code -->

</head>
<body>
    <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script src="~/JS/SocialLogin.js" type="text/javascript"></script>
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
            </div>
            <div class="navbar-collapse collapse">
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>
    
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

这是我的 package.json 文件 -


  "name": "angular-quickstart",
  "version": "1.0.0",
  "scripts": 
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings"
  ,
  "license": "ISC",
  "dependencies": 
    "@angular/common": "2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/forms": "2.0.0",
    "@angular/http": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "@angular/router": "3.0.0",
    "@angular/upgrade": "2.0.0",
    "core-js": "^2.4.1",
    "reflect-metadata": "^0.1.3",
    "rxjs": "5.0.0-beta.12",
    "systemjs": "0.19.27",
    "zone.js": "^0.6.23",
    "angular2-in-memory-web-api": "0.0.20",
    "bootstrap": "^3.3.6"
  ,
  "devDependencies": 
    "concurrently": "^2.2.0",
    "lite-server": "^2.2.2",
    "typescript": "^2.0.2",
    "typings":"^1.3.2"
  

 

这是我的 systemjs.config.js 文件 -

(function (global) 
  System.config(
    paths: 
      // paths serve as alias
      'npm:': 'node_modules/'
    ,
    // map tells the System loader where to look for things
    map: 
      // our app is within the app folder
      app: 'app',
      // angular bundles
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      // other libraries
      'rxjs':                      'npm:rxjs',
      'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
    ,
    // packages tells the System loader how to load when no filename and/or no extension
    packages: 
      app: 
        main: './main.js',
        defaultExtension: 'js'
      ,
      rxjs: 
        defaultExtension: 'js'
      ,
      'angular-in-memory-web-api': 
        main: './index.js',
        defaultExtension: 'js'
      
    
  );
)(this);

当节点模块文件夹不包含在项目中时,它构建成功并且当我运行它时它工作正常。

一旦我发布它并将发布移动到开发服务器并将其部署在 IIS 上,mvc 就会运行,但 angular 2 不会。 这些是我得到的错误 -

我认为我收到此错误是因为缺少节点模块文件夹。

如果我返回项目并在项目中包含节点模块并构建它,我会收到这些错误 -

严重性代码描述项目文件行抑制状态 错误构建:文件 'E:/MyApp/MyApp/MyApp.Site/node_modules/browser-sync/node_modules/rx/ts/core/linq/observable/mergeproto.ts' 未找到。 MyApp.Site E:\MyApp\MyApp\MyApp.Site\tsc

严重性代码描述项目文件行抑制状态 错误构建:文件 'E:/MyApp/MyApp/MyApp.Site/node_modules/browser-sync/node_modules/rx/ts/core/linq/observable/zipproto.ts' 未找到。 MyApp.Site E:\MyApp\MyApp\MyApp.Site\tsc

我该如何解决这个问题? 在 iis 上使用 .net mvc 部署 angular 2 应用程序的正确方法是什么? 在这个项目中包含节点模块的正确方法是什么?

谢谢!

【问题讨论】:

嗨 Dina,我面临同样的问题,无法继续进行。你找到任何解决方案了吗?如果你发现了什么,请告诉我? 【参考方案1】:

我也遇到过同样的问题,没有找到合适的解决方案, 所以我使用了另一种解决方案。

    在 IIS 上独立部署您的 MVC (API)。 使用 ng prod 单独构建您的 Angular 2 应用程序。 将 Angular 2 应用程序装置(di​​st 文件夹)部署为静态网站 在 IIS 上。 在 Angular 2 API 中,使用已部署的 API 进行数据访问。

如果你有任何错误 ping 我。

【讨论】:

以上是关于使用 .net mvc 在 IIS angular 2 应用程序上发布的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 上使用 .NET Core 运行 ASP.NET 5 (MVC 6)

在 Windows 8 的 IIS 8 上使用 .NET 4.5 的 MVC 4 网站给出 403.14 禁止错误 [关闭]

ASP.NET MVC 6 使用 IIS 开发无需发布

在 iis 中发布 .net core 和 angular2

使用 CORS 在 IIS 上运行的 Angular 2 和 .net 核心 Web 应用程序之间的 HTTP 415 OPTIONS 请求

Win7 下IIS(7.5)发布 ASP.NET MVC