2016-07-16 86 views
5

我有一个工作web.config中,如下图所示:ASP.net核心1.0 web.config文件被覆盖造成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> 

但不知何故,Visual Studio是更新我的web.config:

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

这可以通过发布菜单在Visual Studio中工作(并且一旦部署到一个天蓝色的web应用程序就可以工作)。如果我使用dotnet CLI(如dotnet publish),它不起作用,因为它使用变量:%LAUNCHER_PATH%和%LAUNCHER_ARGS%保留web.config,而不是我想要的:dotnet和。\ Example.dll。

注意:当使用dotnet恢复和通过命令行构建dotnet时,我的构建服务器不污染web.config。也不使用MSBuild来建立我的SLN。我在本地以及构建服务器上安装了visual studio 2015,并验证了我的命令行版本与“dotnet”cli匹配。

如何在每次提交之前通过回滚web.config来对抗Visual Studio?我显然做错了,应该是一个简单的配置修复?

更新:

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

我已经知道它发生了,当我点击在Visual Studio中运行以在本地查看网站时。仍然不知道如何解决这个问题呢。 – Dessus

回答

0

更好地在json文件(如appsettings.json)中迁移您的配置设置,然后在startup.cs中使用configurationbuilder将这些文件设置为配置源。

+0

我不是如何做到这一点。你能详细说明吗?我很可能有一些来自RC2的设置文件,但我确实遵循了许多指南,并且与干净的1.0项目进行了比较。 – Dessus

+0

我知道这是我试图做的,我只是不知道如何。我想我可以以某种方式在某处设置.json文件中这些变量的值。 – Dessus

0

Publishing to IIS

发布 - IIS工具可以被添加到任何.NET核心应用和 将通过创建或修改 web.config文件配置ASP.NET核心模块。该工具在发布dotnet 发布命令或使用Visual Studio发布后运行,并将为您配置 processPath和参数。

从project.json中的发布后脚本中删除dotnet publish-iis将停止自动更新。

+0

我的project.json中没有发布后的脚本,但这仍然发生 –