ASP.net core 1.0 web.config is 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 updates 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 via the publish menu (and works after deployment in an azure web application). However, if I use the dotnet CLI, for example, dotnet publish, it does not work, since it saves this web.config with the variables:% LAUNCHER_PATH% and% LAUNCHER_ARGS% instead of my desired ones: dotnet and. \ Example.dll.

Note. My build server does not pollute web.config when using dotnet recovery and dotnet build via command line. Not using MSBuild to build my sln. I have visual studio 2015 locally and on my build server, and I have verified that the command line versions for the "dotnet" cli match.

How can I not fight Visual Studio by dropping my web.config before each commit? Am I explicitly doing something wrong, which should be a simple 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" } } 
+6
source share
2 answers

It is better to transfer the configuration parameters to json files, such as appsettings.json, and then set these files as the configuration source using configurebuilder in startup.cs.

0
source

Publish to IIS :

You can add the publish-iis tool to any .NET Core application and configure the ASP.NET core module by creating or modifying the web.config file. The tool starts after publishing with dotnet to publish a command or publication in Visual Studio and configure the processPath and arguments for you.

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

0
source

All Articles