У меня проблема с развернутым приложением. Я постараюсь предоставить как можно больше информации.
В проекте API используются Swagger через Swashbuckle и Castle Windsor.
Когда Swagger включен в SwaggerConfig.cs через
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
Мы получаем следующее исключение:
Method not found: 'Void Swashbuckle.Application.SwaggerDocsConfig.RootUrl(System.Func`2<System.Net.Http.HttpRequestMessage,System.String>)'.
Вот полный регистр звонков, на случай, если это уместно
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.RootUrl(req => req.RequestUri.GetLeftPart(UriPartial.Authority) + "/api");
c.MultipleApiVersions((api, v) => true,
vc =>
{
vc.Version("mobile", "Mobile");
vc.Version("web", "Web");
});
c.UseFullTypeNameInSchemaIds();
c.DescribeAllEnumsAsStrings();
c.DocumentFilter<VersionFilter>();
})
.EnableSwaggerUi(c =>
{
c.EnableDiscoveryUrlSelector();
});
Если мы отключим swagger (удалив атрибут сборки), приложение начнет сбой при запуске Castle Windsor со следующей ошибкой:
Method 'Create' in Type 'XXX.XXX.XXX.CastleWindsor.WindsorCompositionRoot' from assembly 'xxx.xxx.Backend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.'
Вот метод Configure () для WindsorConfig.cs
public static void Configure()
{
WindsorConfig.Container = new WindsorContainer();
WindsorConfig.Container.Install(FromAssembly.This());
System.Web.Http.GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WindsorCompositionRoot(WindsorConfig.Container));
}
Проблема возникла, когда мы обновили разделяемую библиотеку в решении до .net standard 2 из PCL. Это, в свою очередь, означало, что нам пришлось обновить все другие проекты в решении до .net 4.7.1 (в решении есть приложение UWP, которое было нашей первоначальной целью обновления, что означало, что мы должны были обновить библиотеку, но я отступил) Подводя итог, можно сказать, что эта проблема возникла при обновлении 4.7.1.
Приложение развертывается в Azure через Bamboo с / msbuild & msdeploy. Мы уверены, что двоичные файлы и web.config синхронизированы с разработкой, поскольку мы вручную развернули их через FTP.
Я удалил все двоичные файлы через FTP перед повторной загрузкой, чтобы убедиться в отсутствии устаревших сборок.
Я подтвердил, что приложение Azure в Куду показывает правильные версии для поддержки 4.7.1, как описано здесь: https://github.com/Azure/app-service-announcements/issues/63
Приложение, которое не запущено, развертывается в виртуальном каталоге (/ api) службы приложений в Azure. Основной веб-сайт (on /) является статическим и использует угловой доступ к API.
Я подтвердил, что web.config в проектах / и / api отображается
<compilation targetFramework="4.7.1" />
<httpRuntime targetFramework="4.7.1" />
Версии пакета следующие (мы выполнили переустановку nuget после обновления целевой платформы):
<package id="Castle.Core" version="3.3.0" targetFramework="net471" />
<package id="Castle.Windsor" version="3.3.0" targetFramework="net471" />
<package id="Castle.Windsor.Lifestyles" version="0.4.0" targetFramework="net471" />
<package id="Swashbuckle" version="5.3.2" targetFramework="net471" />
<package id="Swashbuckle.Core" version="5.3.2" targetFramework="net471" />
Раньше у меня была эта проблема в среде разработки, когда я пытался обновить систему до 4.7.1 (для другой зависимости), но на этот раз разработка работает без ошибок, и она только сейчас дает сбой при развертывании в Azure.
.NET Framework версия на портале Azure для этого сервиса приложения показывает 4.7
Сейчас я думаю, что проблема не в коде, который мы используем для инициализации Swagger и / или Castle Windsor, скорее, это связано с версией фреймворка или несоответствующей версией сборки, так как приложение работает на моем компьютере. Разработка машины без ошибок, но у меня закончились идеи, что попробовать дальше.