2016-12-19 1 views
0

Я разрабатываю веб-приложение с помощью ASP.NET Core 1.1.0. Мое приложение работало с IIS Express. Но когда я был развернут приложение для IIS, я получил ошибку «Не удается найти расположение библиотеки компиляции для пакета« Microsoft.AspNetCore.Antiforgery »».Не удается найти расположение библиотеки компиляции для пакета «Microsoft.AspNetCore.Antiforgery»

Я был удален preserveCompilationContext из project.json, но я получил «один или несколько ссылок компиляции отсутствует. Возможные причины включают недостающее свойство„preserveCompilationContext“в разделе„buildOptions“в project.json приложения.» сообщение об ошибке.

Статические файлы (например .html) работают нормально.

Как решить эту проблему?

project.json

{ 
    "dependencies": { 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.1.0", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.1.0", 
    "Microsoft.AspNetCore.Mvc": "1.1.0", 
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final", 
    "Microsoft.AspNetCore.Routing": "1.1.0", 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0", 
    "Microsoft.AspNetCore.StaticFiles": "1.1.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0", 
    "Microsoft.Extensions.Configuration.Json": "1.1.0", 
    "Microsoft.Extensions.Configuration.UserSecrets": "1.1.0", 
    "Microsoft.Extensions.Logging": "1.1.0", 
    "Microsoft.Extensions.Logging.Console": "1.1.0", 
    "Microsoft.Extensions.Logging.Debug": "1.1.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0", 
    "Microsoft.NETCore.App": "1.1.0" 
    }, 

    "tools": { 
    }, 

    "frameworks": { 
    "netcoreapp1.1": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true, 
    "nowarn": [], 
    "copyToOutput": [ "appsettings.json", "appsettings.staging.json" ] 
    }, 

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

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "**/*.cshtml", 
     "appsettings.json", 
     "appsettings.staging.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ], 
    "precompile": [ "C:\\Windows\\System32\\inetsrv\\appcmd recycle apppool /apppool.name:local.com" ] 
    } 
} 

Startup.cs

using System.Collections.Generic; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Http; 
using Microsoft.AspNetCore.Localization; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.Logging; 

namespace Web.Management 
{ 
    public class Startup 
    { 
     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(); 
     } 

     public IConfigurationRoot Configuration { get; } 

     // This method gets called by the runtime. Use this method to add services to the container. 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddLocalization(options => 
      { 

      }); 

      // Add framework services. 
      services 
       .AddMvc(options => 
       { 
        options.Filters.Add(new ExceptionFilter()); 

       }) 
       .AddViewOptions(options => 
       { 

       }); 

      services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

      services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
      loggerFactory.AddDebug(); 

      app.UseLogger(); 

      if (env.IsDevelopment()) 
      { 
       app.UseDeveloperExceptionPage(); 
      } 
      else 
      { 
       app.UseExceptionHandler("/Home/Error"); 
      } 

      var localizationOptions = new RequestLocalizationOptions 
      { 
       DefaultRequestCulture = new RequestCulture("en-US"), 
       RequestCultureProviders = new List<IRequestCultureProvider> 
       { 
        new QueryStringRequestCultureProvider(), 
        new CookieRequestCultureProvider(), 
        new AcceptLanguageHeaderRequestCultureProvider() 
       } 
      }; 

      app.UseRequestLocalization(localizationOptions); 

      HttpContextMiddleware.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>()); 

      //app.UseStatusCodePages(); 

      app.UseStaticFiles(); 

      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationScheme = "AuthCookie", 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = false, 
       LoginPath = new PathString("/login"), 
       CookieSecure = CookieSecurePolicy.SameAsRequest 
      }); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        name: "default", 
        template: "{controller=Home}/{action=Index}/{id?}"); 
      }); 
     } 
    } 
} 
+0

Какова была ошибка ** перед ** удалением 'preserveCompilationContext' из project.json? – Sanket

+0

Я получаю сообщение об ошибке ** Не удается найти расположение библиотеки компиляции для пакета «Microsoft.AspNetCore.Antiforgery» ** перед удалением saveCompilationContext. – Mennan

+0

Вы пытались восстановить «dotnet restore» из командной строки? – Sanket

ответ

0

Возвращение preserveCompilationContext назад, может быть?

+0

No Dimitry ... оригинальная ошибка в заголовке. – Sanket

+0

К сожалению. У нас есть вопрос «два-в-одном», я был смущен, немного догадываясь, на какой из них я должен ответить :) – Dmitry

0

Похоже, что ваш проект.json не включает в себя все зависимости вашего проекта, что может объяснить, почему библиотеки не найдены в вашей цели развертывания - как вы развертываете в IIS и можете ли вы подтвердить, что все требуемые библиотеки DLL включены?

Microsoft.AspNetCore.Mvc зависит от:
Microsoft.AspNetCore.Mvc.Razor, которая зависит от:
Microsoft.AspNetCore.Mvc.ViewFeatures, который зависит от:
Microsoft.AspNetCore.Antiforgery

preserveCompilationContext используется для компиляции MVC представления, которые могут быть также ссылки на содержимое библиотеки AntiForgery в генерируйте необходимые маркеры и куки-файлы в любых формах вашего сайта.

+0

Как вы определили эту зависимость - ViewFeatures зависит от Microsoft.AspNetCore.Antiforgery? – Sanket

+0

Я использовал Google, чтобы найти какие-либо ссылки на пакет Antiforgery nuget, whick перечислил пакет ViewFeatures, оттуда было легко найти ссылки на это: в каждом пакете перечислены его прямые зависимости, поэтому вы можете следить за ними. –

+0

Я добавил Microsoft.AspNetCore.Mvc.Razor, Microsoft.AspNetCore.Mvc.ViewFeatures, зависимости от Microsoft.AspNetCore.Antiforgery к project.json, но не запускался. – Mennan