简体   繁体   中英

ASP.net core 1.0 web.config is being overwritten causing CGI exceptions

I have a working web.config as shown below:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Example.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

But somehow Visual studio is updating my web.config to:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

This works in Visual studio through the publish menus (and works once deployed to an azure web app). If I however use dotnet CLI such as dotnet publish, it doesn't work as it keeps that web.config with the variables: %LAUNCHER_PATH% and %LAUNCHER_ARGS% instead of my desired: dotnet and .\\Example.dll .

Note: My build server doesn't pollute the web.config when using dotnet restore and dotnet build via command line. Nor when using MSBuild to build my sln. I have visual studio 2015 locally and on my build server and I have verified my command line versions match for "dotnet" cli.

How can I not fight Visual studio by rolling back my web.config before every commit? I am clearly doing something wrong that should be an easy configuration fix?

Update:

Startup.cs

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

Appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Program.cs

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

Project.json

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true,

    "exclude": [
      "wwwroot",
      "typings",
      "node_modules"
    ],
    "publishExclude": [
      "**.user",
      "**.vspscc"
    ]
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    }
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+netstandard1.6"
    },

    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+netstandard1.6"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "netstandard1.4",
        "dnxcore50"
      ],
      "dependencies": {
        "Microsoft.AspNetCore.Diagnostics": "1.0.0",
        "Microsoft.AspNetCore.Mvc": "1.0.0",
        "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
        "Microsoft.AspNetCore.StaticFiles": "1.0.0",
        "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
        "Microsoft.Extensions.Configuration.Json": "1.0.0",
        "Microsoft.Extensions.Logging": "1.0.0",
        "Microsoft.Extensions.Logging.Console": "1.0.0",
        "Microsoft.Extensions.Logging.Debug": "1.0.0",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
        "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
        "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0",
        "Microsoft.AspNetCore.Hosting": "1.0.0",
        "System.ServiceModel.Primitives": "4.1.0",
        "System.ServiceModel.Http": "4.1.0",
        "System.Private.ServiceModel": "4.1.0",
        "Presentation.Common": "*",
        "System.Runtime": "4.1.0",
        "System.Runtime.Numerics": "4.0.1",
        "SharedContract": "*"
      }
    }
  },

  "runtimes": {
    "win10-x64": {},
    "win10-x86": {},
    "win8-x64": {},
    "win8-x86": {}
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install", "gulp rebuild", "gulp min" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  },

  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-clean": "^0.3.2",
    "gulp-concat": "^2.6.0",
    "gulp-less": "3.0.2",
    "gulp-tsc": "^1.1.5",
    "gulp-typescript": "^2.13.1",
    "lite-server": "^2.2.0",
    "path": "^0.12.7",
    "rimraf": "2.3.2",
    "typescript": "^1.8.10",
    "typings": "^0.8.1"
  }
}

最好在appsettings.json等json文件中迁移配置设置,然后使用startup.cs中的configurationbuilder将这些文件设置为配置源。

Publishing to IIS :

The publish-iis tool can be added to any .NET Core application and will configure the ASP.NET Core Module by creating or modifying the web.config file. The tool runs after publishing with the dotnet publish command or publishing with Visual Studio and will configure the processPath and arguments for you.

Removing dotnet publish-iis from your post-publish scripts in project.json will stop the automatic updates.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM