Sto lavorando su un progetto che include un componente WebAPI ASP.NET.Intermittente "Impossibile caricare il tipo 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'" Errore
intermittenza, ottengo il seguente errore:
Could not load type 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly 'System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
con l'errore di origine indicando il mio GlobalConfiguration.Configure()
chiamata:
Line 35: {
Line 36: AreaRegistration.RegisterAllAreas();
Line 37: GlobalConfiguration.Configure(WebApiConfig.Register); //<-- error here
Line 38: FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Line 39: RouteConfig.RegisterRoutes(RouteTable.Routes);
Nel mio registro, sto facendo quanto segue per restituire JSON per default :
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes
.FirstOrDefault(t => t.MediaType == "application/xml");
if (appXmlType != null)
{
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
(non sicuro di la fonte, ma trovata da qualche parte su questo sito come modo per restituire JSON per impostazione predefinita, a meno che il chiamante chieda qualcos'altro)
Vorrei continuare a restituire JSON come il tipo di contenuto predefinito in futuro.
Il progetto include altri due siti Web (non WebAPI) (MVC5), che raggiungono il sito WebAPI.
Ecco la cosa interessante:
- Questo NON accade quando l'applicazione viene distribuita (Azure)
- Questo accade solo occasionalmente
- In genere, ho eseguito uno dei siti MVC5 in il debugger e vedi questo numero
- Se navigo direttamente al sito WebAPI dopo quanto sopra, ricevo la "Yellow Screen of Death" con l'errore come sopra
- A volte, anche dopo un riavvio a freddo, questo errore non apparirà, altre volte lo farà
Quello che ho attualmente fare per aggirare il problema:
- Se eseguo il sito WebAPI nel debugger, se l'errore è presente, essa stessa fissato
- Dopo l'esecuzione nel debugger (al precedente), posso rilanciare un sito MVC5 nel debugger e la questione va via
Proprio a ripetere, thi s NON succede sempre quando l'applicazione viene distribuita in Azure.
Ho diversi sviluppatori che lavorano a questo progetto e ci imbattiamo tutti nello stesso errore a un certo punto.
sto referenziazione i seguenti pacchetti Nuget:
- Microsoft.AspNet.WebApi (versione 5.2.3)
- Microsoft.AspNet.WebApi.Client (versione 5.2.3)
- Microsoft. AspNet.WebApi.Core (versione 5.2.3)
- Microsoft.AspNet.WebApi.Owin (versione 5.2.2)
- Microsoft.AspNet.WebApi.WebHost (versione 5.2.3)
Se guardo dentro il file *.csproj
, ho un riferimento a quanto segue:
<Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
<Private>True</Private>
</Reference>
ho controllato la cartella bin
del sito web, e tutti i gruppi al suo interno hanno la versione corretta come da lista di cui sopra (compresi System.Net.Http.Formatting. dll).
inoltre notare che, durante il debug e lo sviluppo, ciascuno dei tre siti web è gestita sotto Local IIS
(vincoli di risorse esterne ci costringono a fare questo), in modo da avere:
http://localhost/site1
http://localhost/site2
http://localhost/api
sta diventando ingombrante per entrare in una sessione di debug, per ottenere questo errore, per poi interrompere il debug, avviare il sito API sotto il debugger e quindi tornare a ciò che stavo facendo all'inizio.
Non so dove altro andare a rintracciare cosa sta succedendo qui. Qualche idea?
Aggiornamento - 26 luglio 2016
ancora avere questo accada. Dopo aver postato la domanda, ho aggiornato WebAPI per l'esecuzione nel proprio pool di applicazioni, ma ciò non sembra aver fatto la differenza.
Provare a impostare '" Copia su locale "' su true per il riferimento 'System.Net.Http.Formatting' –
Grazie per il commento -' Copia su locale' è stato impostato su 'true' per un po 'di tempo - non sembra fare la differenza –
Probabilmente la cartella 'bin' (quando distribuita) contiene un' System.Net.Http.Formatting.dll'; rimuoverlo e verrà utilizzato il runtime 'System.Net.Http.Formatting.dll'. – josejuan