2016-07-16 226 views
5

ho un web.config lavora come illustrato di seguito:ASP.net nucleo 1.0 web.config viene sovrascritto causando eccezioni CGI

<?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> 

Ma in qualche modo lo studio visivo sta aggiornando il mio web.config per:

<?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> 

Questo funziona in Visual Studio tramite i menu di pubblicazione (e funziona una volta distribuito su un'app Web blu). Se tuttavia utilizzo la CLI dotnet come dotnet publish, non funziona poiché mantiene web.config con le variabili:% LAUNCHER_PATH% e% LAUNCHER_ARGS% invece del mio desiderato: dotnet e. \ Example.dll.

Nota: Il mio server di build non inquina il web.config quando si utilizza il ripristino di dotnet e la creazione di dotnet tramite la riga di comando. Né quando si usa MSBuild per costruire il mio sln. Ho localmente studio visivo 2015 e sul mio server di build e ho verificato che le mie versioni da riga di comando corrispondano per cli "dotnet".

Come posso non contrastare Visual Studio ripristinando il mio web.config prima di ogni commit? Sto chiaramente facendo qualcosa di sbagliato che dovrebbe essere una facile soluzione di configurazione?

Aggiornamento:

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" 
    } 
} 
+1

Da allora ho appreso che succede quando faccio clic su run in visual studio per visualizzare il sito Web localmente. Ancora non sono sicuro di come risolvere questo ancora. – Dessus

risposta

0

Meglio migrare le impostazioni di configurazione in file json come appsettings.json e quindi impostare questi file come origine di configurazione utilizzando configurationbuilder in startup.cs.

+0

Non so come fare. Sei in grado di elaborare? È abbastanza probabile che io abbia alcuni file di impostazioni da RC2, ma ho seguito molte guide e paragonato a progetti puliti 1.0. – Dessus

+0

Capisco che questo è quello che sto cercando di fare, Im non sono sicuro di come. Immagino che in qualche modo possa in qualche modo impostare i valori di quelle variabili nei file .json. – Dessus

0

Publishing to IIS:

Lo strumento di publish-iis possono essere aggiunti a qualsiasi applicazione .NET Core e configurerà il Core Module ASP.NET creando o modificando il file web.config . Lo strumento viene eseguito dopo la pubblicazione con il comando di pubblicazione dotnet o la pubblicazione con Visual Studio e configurerà processPath e gli argomenti per voi.

La rimozione di dotnet publish-iis dagli script di post-pubblicazione in project.json interromperà gli aggiornamenti automatici.

+0

Non ho script di post-pubblicazione nel mio project.json, eppure succede ancora –