Aggiornare i progetti di Excel e Word di cui si esegue la migrazione a .NET Framework 4.5

Se si dispone di un progetto di Excel o Word che usa una delle funzionalità seguenti, è necessario modificare il codice se il framework di destinazione viene modificato in .NET Framework 4 o versione successiva:

Rimuovere l'attributo ExcelLocale1033 dai progetti di Excel

È Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute stato rimosso dalla parte del runtime di Visual Studio 2010 Tools per Office usato per soluzioni destinate a .NET Framework 4 o versione successiva. Common Language Runtime (CLR) in .NET Framework 4 e versioni successive passano sempre l'ID delle impostazioni locali 1033 al modello a oggetti di Excel e non è più possibile usare questo attributo per disabilitare questo comportamento. Per altre informazioni, vedere Globalizzazione e localizzazione di soluzioni Excel.

Per rimuovere ExcelLocale1033Attribute

  1. Con il progetto aperto in Visual Studio, aprire Esplora soluzioni.

  2. Nel nodo Proprietà (per C#) o Progetto personale (per Visual Basic) fare doppio clic sul file di codice AssemblyInfo per aprirlo nell'editor di codice.

    Nota

    Per visualizzare il file di codice AssemblyInfo nei progetti di Visual Basic, è necessario fare clic sul pulsante Mostra tutti i file in Esplora soluzioni .

  3. Individuare Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute e rimuoverlo dal file o impostarlo come commento.

    [assembly: ExcelLocale1033Proxy(true)]
    

Rimuovere un riferimento alla classe ExcelLocal1033Proxy

I progetti creati con Microsoft Visual Studio 2005 Tools per Microsoft Office System creano un'istanza dell'oggetto Application di Excel usando la classe Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy. Questa classe è stata rimossa dalla parte del runtime di Visual Studio 2010 Tools per Office usata per soluzioni destinate a .NET Framework 4 o versione successiva. Di conseguenza, è necessario rimuovere o impostare come commento la riga di codice che fa riferimento a questa classe.

Per rimuovere il riferimento alla classe ExcelLocal1033Proxy

  1. Aprire il progetto in Visual Studio e quindi aprire Esplora soluzioni.

  2. In Esplora soluzioni aprire il menu di scelta rapida per ThisAddin.cs (per C#) o ThisAddin.vb (per Visual Basic) e quindi scegliere Visualizza codice.

  3. Nell'area VSTO generated code dell'editor di codice rimuovere o impostare come commento la riga di codice seguente.

    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    
    

Aggiornare il codice che usa i metodi GetVstoObject e HasVstoObject

Nei progetti destinati a .NET Framework 3.5 sono disponibili i metodi GetVstoObject e HasVstoObject come metodi di estensione in uno degli oggetti nativi seguenti nel progetto: Document, Workbook, Worksheet o ListObject. Quando si chiamano questi metodi, non è necessario passare un parametro. Nell'esempio di codice seguente viene illustrato come usare il metodo GetVstoObject in un componente aggiuntivo VSTO di Word destinato a .NET Framework 3.5.

Microsoft.Office.Tools.Word.Document vstoDocument =
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();

Nei progetti destinati a .NET Framework 4 o versione successiva, è necessario modificare il codice per accedere a questi metodi in uno dei modi seguenti:

  • È comunque possibile accedere a questi metodi come metodi di estensione nell'oggetto Document, Workbook, Worksheeto ListObject . Tuttavia, è ora necessario passare l'oggetto restituito dalla proprietà Globals.Factory a questi metodi.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • In alternativa, è possibile accedere ai metodi nell'oggetto restituito dalla proprietà Globals.Factory. Quando si accede ai metodi in questo modo, è necessario passare l'oggetto nativo che si vuole estendere al metodo.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
    

    Per altre informazioni, vedere Estendere documenti di Word e cartelle di lavoro di Excel nei componenti aggiuntivi VSTO in fase di esecuzione.

Aggiornare il codice che usa istanze delle classi generate nei progetti a livello di documento

Nei progetti a livello di documento destinati a .NET Framework 3.5, le classi generate nei progetti derivano dalle classi seguenti nella Strumenti di Visual Studio per il runtime di Office:

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn: Worksheet

  • Chartn: ChartSheet

    Nei progetti destinati a .NET Framework 4 o versione successiva, i tipi nella Strumenti di Visual Studio per il runtime di Office elencati in precedenza sono interfacce anziché classi. Le classi generate nei progetti destinati a .NET Framework 4 o versione successiva derivano dalle nuove classi seguenti nella Strumenti di Visual Studio per il runtime di Office :

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn: WorksheetBase

  • Chartn: ChartSheetBase

    Se il codice nel progetto fa riferimento a un'istanza di una delle classi generate come classe base da cui deriva, è necessario modificare il codice.

    Ad esempio, in un progetto Cartella di lavoro di Excel destinato a .NET Framework 3.5 potrebbe essere presente un metodo helper che esegue alcune attività nelle istanze delle classi Sheetn generate nel progetto.

private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

Se si ridestina il progetto in .NET Framework 4 o versione successiva, è necessario apportare una delle modifiche seguenti al codice:

  • Modificare tutto il codice che chiama il metodo DoSomethingToSheet per passare la proprietà Base di un oggetto WorksheetBase nel progetto. Questa proprietà restituisce un oggetto Worksheet .

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modificare il parametro del metodo DoSomethingToSheet in modo da richiedere invece un oggetto WorksheetBase .

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

Aggiornare il codice che usa controlli Windows Form nei documenti

È necessario aggiungere un'istruzione using (C#) o Imports (Visual Basic) per lo spazio dei nomi o Microsoft.Office.Tools.Word all'inizio Microsoft.Office.Tools.Excel di qualsiasi file di codice che utilizza la proprietà Controls per aggiungere controlli Windows Form al documento o al foglio di lavoro a livello di codice.

Nei progetti destinati a .NET Framework 3.5 i metodi che aggiungono controlli Windows Form (come il metodo AddButton) sono definiti nelle classi ControlCollection e ControlCollection.

Nei progetti destinati a .NET Framework 4 o versione successiva, questi metodi sono metodi di estensione disponibili nella proprietà Controls. Per usare questi metodi di estensione, il file di codice in cui vengono usati i metodi deve includere un'istruzione using e Imports per lo spazio dei nomi Microsoft.Office.Tools.Excel e Microsoft.Office.Tools.Word . Questa istruzione viene generata automaticamente nei nuovi progetti destinati a .NET Framework 4 o versione successiva. Poiché tuttavia non viene aggiunta automaticamente nei progetti destinati a .NET Framework 3.5, è necessario aggiungerla quando si ridestina il progetto.

Per altre informazioni, vedere Aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornare il codice che gestisce gli eventi di controllo contenuto di Word

Nei progetti destinati a .NET Framework 3.5 questi eventi vengono gestiti dal delegato EventHandler<TEventArgs> generico. Nei progetti destinati a .NET Framework 4 o versione successiva, questi eventi vengono gestiti da altri delegati.

Nella tabella seguente sono elencati gli eventi di controllo contenuto di Word e i delegati associati nei progetti destinati a .NET Framework 4 o versione successiva.

Evento Delegare l'uso in progetti .NET Framework 4 e versioni successive
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Aggiornare il codice che usa le classi OLEObject e OLEControl

Nei progetti destinati a .NET Framework 3.5 è possibile aggiungere controlli personalizzati (come controlli utente Windows Form) a un documento o un foglio di lavoro usando le classi Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl.

Nei progetti destinati a .NET Framework 4 o versione successiva, queste classi sono state sostituite dalle ControlSite interfacce e ControlSite . È necessario modificare il codice che fa riferimento a Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl perché invece faccia riferimento a ControlSite e ControlSite. A parte i nuovi nomi, questi controlli si comportano allo stesso modo che nei progetti destinati a .NET Framework 3.5.

Per altre informazioni, vedere Aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornare il codice che usa la proprietà Controls.Item(Object)

Nei progetti destinati a .NET Framework 3.5 è possibile utilizzare la proprietà Item(Object) dell'insieme Microsoft.Office.Tools.Word.Document.Controls o Microsoft.Office.Tools.Excel.Worksheet.Controls per determinare se un documento o un foglio di lavoro dispone di un controllo specificato.

Nei progetti destinati a .NET Framework 4 o versione successiva, la proprietà Item(Object) è stata rimossa da queste raccolte. Per determinare se un documento o un foglio di lavoro contiene un controllo specificato, utilizzare invece il metodo Contains(System.Object) dell'insieme Controls o Controls .

Per altre informazioni sull'insieme Controls di documenti e fogli di lavoro, vedere Aggiungere controlli ai documenti di Office in fase di esecuzione.

Aggiornare il codice che usa raccolte che derivano da CollectionBase

Nei progetti destinati a .NET Framework 3.5, diversi tipi di raccolta nel runtime di Strumenti di Visual Studio per Office derivano dalla CollectionBase classe , ad esempio Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollectione Microsoft.Office.Tools.Word.ControlCollection.

Nei progetti destinati a .NET Framework 4 o versione successiva, questi tipi di raccolta sono ora interfacce che non derivano da CollectionBase. In questi tipi di raccolta non sono più disponibili alcuni membri, come Capacity, Liste InnerList.