ASP.net core 1.0 web.config se sobrescribe causando excepciones CGI
Tengo un web.config que funciona como se muestra a continuación:
<?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>
Pero de alguna manera Visual Studio está actualizando mi web.config a:
<?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>
Esto funciona en Visual Studio a través de los menús de publicación (y funciona una vez implementado en una aplicación web azul). Sin embargo, si uso dotnet CLI, como dotnet Publish, no funciona, ya que mantiene ese web.config con las variables:% LAUNCHER_PATH% y% LAUNCHER_ARGS% en lugar de mi deseado: dotnet y. \ Example.dll.
Nota: Mi servidor de compilación no contamina el web.config cuando uso dotnet restore y dotnet build a través de la línea de comandos. Tampoco cuando uso MSBuild para construir mi sln. Tengo Visual Studio 2015 localmente y en mi servidor de compilación y he verificado que mis versiones de línea de comandos coinciden con "dotnet" cli.
¿Cómo no puedo luchar contra Visual Studio haciendo retroceder mi web.config antes de cada confirmación? Claramente estoy haciendo algo mal que debería ser una solución de configuración fácil?
Actualizar:
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"
}
}