Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come risolvere il problema in cui non è possibile compilare un progetto basato su .NET Framework in Visual Studio.
Versione originale del prodotto: .NET Framework 4.5
Numero KB originale: 2956788
Sintomi
Si consideri lo scenario seguente:
Si dispone di un'applicazione compilata usando un progetto basato su .NET Framework 4.0 in Microsoft Visual Studio.
Questa applicazione dispone di un controllo ActiveX di Visual Basic 6.0.
Questo controllo fa riferimento a un file di assembly di interoperabilità primario di Office. Ad esempio, un file office.dll.
È possibile assegnare nuovamente il progetto a .NET Framework 4.5.x in Visual Studio.
In questo scenario, quando si compila il progetto, questo programma di compilazione non può caricare l'assembly di interoperabilità per il controllo. Viene inoltre visualizzato un messaggio di errore simile al seguente:
Errore AxImp: impossibile risolvere la dipendenza dall'assembly 'office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' perché non è stato precaricato. Quando si usano le API ReflectionOnly, gli assembly dipendenti devono essere precaricati o caricati su richiesta tramite l'evento ReflectionOnlyAssemblyResolve.
Annotazioni
Questo problema si verifica solo nel computer con .NET Framework 4.0, .NET Framework 4.5 o .NET Framework 4.5.1 e il prodotto Microsoft Office installato.
Motivo
Questo problema si verifica a causa di una modifica della progettazione tra Common Language Runtime (CLR) 2.0 e CLR 4.0 sulla modalità di caricamento delle librerie dei tipi e delle dipendenze.
.NET Framework 4.0 richiede che determinati assembly vengano caricati quando si risolvono tipi da una libreria dei tipi che fa riferimento a un assembly di interoperabilità primario. Tuttavia, questo non è stato il caso in .NET Framework 2.0. L'utilità di importazione ActiveX non ha modificato il comportamento tra .NET Framework 2.0 e Framework 4.0. Questa modifica di progettazione impedisce la generazione degli assembly di interoperabilità. Pertanto, quando l'utilità di importazione ActiveX viene eseguita in Visual Studio, l'utilità di importazione non può risolvere e precaricare tutti i riferimenti per questo controllo ActiveX.
Soluzione
Per risolvere questo problema, creare gli assembly di interoperabilità usando AxImp.exe. Ad esempio, il messaggio di errore menzionato nella sezione Sintomi indica che l'assembly di Microsoft Office richiesto è la versione 12.0. Per risolvere il problema, seguire questa procedura:
Trovare l'assembly di Office richiesto nella Global Assembly Cache (GAC).
Selezionare il percorso della versione di Office indicata nel messaggio di errore. Sarà simile a
C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c
.Eseguire il comando seguente dal prompt dei comandi di Visual Studio per generare i nuovi assembly di interoperabilità:
aximp < **Name of Ocx** > /out: < **Interop assembly name** > /rcw: <C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c\office.dll>
Aggiungere gli assembly di interoperabilità generati al progetto di Visual Studio usando la
Add References
funzionalità .
Annotazioni
Se l'assembly di interoperabilità primario di Office non è installato nel computer, lo strumento AxImp.exe può comunque risolvere i tipi senza alcuna assistenza, anche quando viene eseguito dal processo di compilazione di Visual Studio.
Maggiori informazioni
AxImp.exe è uno strumento da riga di comando ed è disponibile con Visual Studio. Questo strumento accetta assembly di riferimento come argomenti della riga di comando. Di conseguenza, questo strumento può caricare gli assembly aggiuntivi previsti da .NET Framework 4.0.