2017-10-03 5 views
0

Nous avons récemment effectué la mise à niveau de Visual Studio Community 2013 vers Community 2017. Mon projet de service REST a commencé à se rompre après le démarrage (construire des passes). Cela ne se produit que sur une machine sur trois. Nous utilisons Microsoft.AspNet.WebApi.Owin pour créer nos points de terminaison REST.Impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0' après la mise à niveau de vs2013 vers vs2017

Le problème semble être sur le chargement System.Web.Http, la bibliothèque est référencée à {solution_folder} /packages/Microsoft.AspNet.WebApi.Core.5.2.3/lib/net45/System.Web.Http. dll.

La DLL référencée se trouve dans le dossier référencé et est également copiée dans le dossier bin lors de la reconstruction. Chose intéressante est que lorsque je reconstruis le projet avec VS2013 je peux démarrer le service manuellement, à partir vs2013 ou vs2017, mais quand je reconstruire le projet avec vs2017 et commencer je reçois l'erreur suivante:

Inner Exception 1: FileLoadException: Could not load file or assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Stacktrace:

System.Reflection.TargetInvocationException occurred
HResult=0x80131604 Message=Exception has been thrown by the target of an invocation. Source=mscorlib StackTrace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Owin.Loader.DefaultLoader.<>c__DisplayClass12.b__b(IAppBuilder builder) at Owin.Loader.DefaultLoader.<>c__DisplayClass1.b__0(IAppBuilder builder) at Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveApp(StartContext context) at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context) at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options) at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider services, StartOptions options) at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options) at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options)
at Microsoft.Owin.Hosting.WebApp.Start[TStartup](String url) at PNX.REST.Service.ServiceAdapter.Initialize() in C:\Projects\peaknx\PNX.OS\PNX.REST.Service\ServiceAdapter.cs:line 32
at PNX.REST.Service.PNXRESTService.StartAdapter(Object state) in C:\Projects\peaknx\PNX.OS\PNX.REST.Service\PNXRESTService.cs:line 85
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Inner Exception 1: FileLoadException: Could not load file or assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Mise à jour:

il semble que seulement sur ma machine les copies de construction fichier app.config comme ProjectName.Service.exe.config, alors que tous les autres, il utilise Web.config. Fondamentalement, je ne reçois jamais ma redirection de dépendance et il cherche toujours System.Web.Http 4.0.0.0 au lieu de 5.2.3.0 puisque cette partie de la configuration n'est pas dans ProjectName.Service.exe.config.

<dependentAssembly> <assemblyIdentity name="System.Web.Http" 
publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> 
</dependentAssembly> 
+0

Cette machine je parie que la version incorrecte de .Net ou asp.net n'est pas enregistrée correctement. Vous êtes la seule personne qui peut pratiquement résoudre ce problème – Liam

+0

J'ai eu un problème similaire. System.net.http a été déplacé dans un fichier nuget. Allez dans chacun de vos projets dans la solution. Allez sur Nuget, recherchez le fichier nuget system.net.http. et améliorez tous pour utiliser la dernière version. voir si cela aide –

+0

Hey merci pour les réponses, petite mise à jour: Il semble que seulement sur mon ordinateur la construction copie le fichier app.config comme ProjectName.Service.exe.config, au lieu du fichier web.config, donc fondamentalement je ne reçois jamais ma dépendance redirection va et il cherche toujours System.Web.Http 4.0.0.0 au lieu de 5.2.3.0 < bindingRedirect oldVersion = "0.0.0.0-5.2.3.0" newVersion = "5.2.3.0" /> ivke

Répondre

0

SOLVED: Le problème est que lors de l'installation VS2017 vous devez vérifier « développement ASP.NET et web » dans les charges de travail pour que VS reconnaître le projet en tant que projet Web et l'utilisation Web.config au lieu de app.config Malheureusement si vous manquez cette étape, il n'y aura pas de rapport d'erreur utile, espérons que cela aidera quelqu'un pour les réponses.