Condividi tramite


Distribuzione di un'applicazione Web ASP.NET con SQL Server Compact con Visual Studio o Visual Web Developer: Distribuzione di database SQL Server Compact - 2 di 12

di Tom Dykstra

Scaricare il progetto iniziale

Questa serie di esercitazioni illustra come distribuire (pubblicare) un progetto di applicazione Web ASP.NET che include un database sql Server Compact usando Visual Studio 2012 RC o Visual Studio Express 2012 RC per Web. È anche possibile usare Visual Studio 2010 se si installa l'aggiornamento di pubblicazione Web. Per un'introduzione alla serie, vedere la prima esercitazione della serie.

Per un'esercitazione che illustra le funzionalità di distribuzione introdotte dopo la versione RC di Visual Studio 2012, illustra come distribuire edizioni di SQL Server diverse da SQL Server Compact e illustra come eseguire la distribuzione in app Azure Service App Web, vedere ASP.NET Distribuzione Web con Visual Studio.

Informazioni generali

Questa esercitazione illustra come configurare due database di SQL Server Compact e il motore di database per la distribuzione.

Per l'accesso al database, l'applicazione Contoso University richiede il software seguente che deve essere distribuito con l'applicazione perché non è incluso in .NET Framework:

È necessario distribuire anche la struttura del database e alcuni (non tutti) dei dati nei due database dell'applicazione. In genere, durante lo sviluppo di un'applicazione, si immettono i dati di test in un database che non si vuole distribuire in un sito live. Tuttavia, è anche possibile immettere alcuni dati di produzione da distribuire. In questa esercitazione si configurerà il progetto Contoso University in modo che il software necessario e i dati corretti vengano inclusi durante la distribuzione.

Promemoria: se viene visualizzato un messaggio di errore o qualcosa non funziona durante l'esercitazione, assicurarsi di controllare la pagina di risoluzione dei problemi.

SQL Server Compact e SQL Server Express

L'applicazione di esempio usa SQL Server Compact 4.0. Questo motore di database è un'opzione relativamente nuova per i siti Web; Le versioni precedenti di SQL Server Compact non funzionano in un ambiente di hosting Web. SQL Server Compact offre alcuni vantaggi rispetto allo scenario più comune di sviluppo con SQL Server Express e la distribuzione in SQL Server completo. A seconda del provider di hosting scelto, SQL Server Compact potrebbe essere più economico da distribuire, perché alcuni provider addebitano costi aggiuntivi per supportare un database SQL Server completo. Non sono previsti costi aggiuntivi per SQL Server Compact perché è possibile distribuire il motore di database stesso come parte dell'applicazione Web.

Tuttavia, è necessario essere consapevoli anche delle relative limitazioni. SQL Server Compact non supporta stored procedure, trigger, viste o replicazione. Per un elenco completo delle funzionalità di SQL Server non supportate da SQL Server Compact, vedere Differenze tra SQL Server Compact e SQL Server. Inoltre, alcuni degli strumenti che è possibile usare per modificare schemi e dati nei database di SQL Server Express e SQL Server non funzionano con SQL Server Compact. Ad esempio, non è possibile usare SQL Server Management Studio o SQL Server Data Tools in Visual Studio con database SQL Server Compact. Sono disponibili altre opzioni per l'uso dei database di SQL Server Compact:

  • È possibile usare Esplora server in Visual Studio, che offre funzionalità limitate di manipolazione del database per SQL Server Compact.
  • È possibile usare la funzionalità di manipolazione del database di WebMatrix, con più funzionalità rispetto a Esplora server.
  • È possibile usare strumenti di terze parti o open source relativamente completi, ad esempio la casella degli strumenti di SQL Server Compact e l'utilità di script di schema e dati di SQL Compact.
  • È possibile scrivere ed eseguire script DDL (data definition language) personalizzati per modificare lo schema del database.

È possibile iniziare con SQL Server Compact e quindi eseguire l'aggiornamento in un secondo momento man mano che le esigenze si evolvono. Le esercitazioni successive di questa serie illustrano come eseguire la migrazione da SQL Server Compact a SQL Server Express e a SQL Server. Tuttavia, se si sta creando una nuova applicazione e si prevede di avere SQL Server nel prossimo futuro, è probabilmente preferibile iniziare con SQL Server o SQL Server Express.

Configurazione del motore di database di SQL Server Compact per la distribuzione

Il software necessario per l'accesso ai dati nell'applicazione Contoso University è stato aggiunto installando i pacchetti NuGet seguenti:

I collegamenti puntano alle versioni correnti di questi pacchetti, che potrebbero essere più recenti rispetto a quanto installato nel progetto iniziale scaricato per questa esercitazione. Per la distribuzione in un provider di hosting, assicurarsi di usare Entity Framework 5.0 o versione successiva. Le versioni precedenti delle migrazioni Code First richiedono l'attendibilità completa e in molti provider di hosting l'applicazione verrà eseguita con attendibilità media. Per ulteriori informazioni su Medium Trust, vedere l'esercitazione sulla distribuzione in IIS in ambiente di test.

L'installazione dei pacchetti NuGet in genere si occupa di tutto ciò che è necessario per distribuire questo software con l'applicazione. In alcuni casi, questa operazione comporta attività come la modifica del file Web.config e l'aggiunta di script di PowerShell eseguiti ogni volta che si compila la soluzione. Se si vuole aggiungere il supporto per una di queste funzionalità,ad esempio SQL Server Compact ed Entity Framework, senza usare NuGet, assicurarsi di conoscere le operazioni eseguite dall'installazione del pacchetto NuGet in modo da poter eseguire le stesse operazioni manualmente.

C'è un'eccezione in cui NuGet non si occupa di tutto ciò che è necessario fare per garantire la corretta distribuzione. Il pacchetto NuGet SqlServerCompact aggiunge un script di post-compilazione al progetto che copia gli assembly nativi in sottocartelle x86 e amd64 nella cartella bin del progetto, ma lo script non include tali cartelle nel progetto. Di conseguenza, Distribuzione Web non le copierà nel sito Web di destinazione, a meno che non vengano incluse manualmente nel progetto. Questo comportamento deriva dalla configurazione di distribuzione predefinita. Un'altra opzione, che non verrà usata in queste esercitazioni, consiste nel modificare l'impostazione che controlla questo comportamento. L'impostazione che è possibile modificare è Solo i file necessari per eseguire l'applicazione in Elementi da distribuire nella scheda Web Pacchetto/Pubblicazione della finestra Proprietà progetto . La modifica di questa impostazione non è in genere consigliata perché può comportare la distribuzione di molti più file nell'ambiente di produzione rispetto alle esigenze. Per altre informazioni sulle alternative, vedere l'esercitazione Configurazione delle proprietà del progetto .

Compilare il progetto e quindi in Esplora soluzioni fare clic su Mostra tutti i file , se non è già stato fatto. Potrebbe anche essere necessario fare clic su Aggiorna.

Solution_Explorer_Show_All_Files

Espandere la cartella bin per visualizzare le cartelle amd64 e x86 , quindi selezionare tali cartelle, fare clic con il pulsante destro del mouse e selezionare Includi nel progetto.

amd64_and_x86_in_Solution_Explorer.png

Le icone della cartella cambiano per indicare che la cartella è stata inclusa nel progetto.

Solution_Explorer_amd64_included.png

Configurazione delle migrazioni Code First per la distribuzione del database dell'applicazione

Quando si distribuisce un database dell'applicazione, in genere non si distribuisce semplicemente il database di sviluppo con tutti i dati in esso contenuti nell'ambiente di produzione, perché è probabile che la maggior parte dei dati in esso contenuti sia disponibile solo a scopo di test. Ad esempio, i nomi degli studenti in un database di test sono fittizi. D'altra parte, spesso non è possibile distribuire solo la struttura di database senza dati in esso contenuti. Alcuni dati nel database di test potrebbero essere dati reali e devono essere presenti quando gli utenti iniziano a usare l'applicazione. Ad esempio, il database potrebbe avere una tabella che contiene valori di grado validi o nomi di reparto reali.

Per simulare questo scenario comune, si configurerà un metodo di inizializzazione delle migrazioni Code First che inserisce nel database solo i dati da includere nell'ambiente di produzione. Questo metodo Seed non inserisce i dati di test perché verrà eseguito nell'ambiente di produzione dopo che Code First crea il database nell'ambiente di produzione.

Nelle versioni precedenti di Code First prima del rilascio delle migrazioni, i metodi di inizializzazione inseriscono anche i dati di test, perché con ogni modifica del modello durante lo sviluppo il database doveva essere completamente eliminato e ricreato da zero. Con le migrazioni Code First, i dati di test vengono conservati dopo le modifiche al database, quindi non è necessario includere i dati di test nel metodo Seed. Il progetto scaricato usa il metodo pre-Migrations per includere tutti i dati nel metodo Seed di una classe di inizializzazione. In questa esercitazione si disabiliterà la classe di inizializzatore e si abiliteranno le migrazioni. Si aggiornerà quindi il metodo Seed nella classe di configurazione Migrations in modo che inserisca solo i dati da inserire nell'ambiente di produzione.

Il diagramma seguente illustra lo schema del database dell'applicazione:

School_database_diagram

Per queste esercitazioni si presuppone che le Student tabelle e Enrollment siano vuote quando il sito viene distribuito per la prima volta. Le altre tabelle contengono dati che devono essere precaricati quando l'applicazione è attiva.

Dato che utilizzerai Code First Migrations, non è più necessario utilizzare l'inizializzatore Code First DropCreateDatabaseIfModelChanges. Il codice per questo inizializzatore si trova nel file SchoolInitializer.cs nel progetto ContosoUniversity.DAL. Un'impostazione nell'elemento appSettings del file Web.config determina l'esecuzione di questo inizializzatore ogni volta che l'applicazione tenta di accedere al database per la prima volta:

<appSettings>
  <add key="Environment" value="Dev" />
  <add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" value="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.DAL" />
</appSettings>

Aprire l'applicazione Web.config file e rimuovere l'elemento che specifica la classe inizializzatore Code First dall'elemento appSettings. L'elemento appSettings è ora simile al seguente:

<appSettings>
  <add key="Environment" value="Dev" />
</appSettings>

Annotazioni

Un altro modo per specificare una classe di inizializzatore consiste nel chiamare Database.SetInitializer nel Application_Start metodo nel file Global.asax . Se si abilitano le migrazioni in un progetto che usa tale metodo per specificare l'inizializzatore, rimuovere tale riga di codice.

Abilitare quindi Migrazioni Code First.

Il primo passaggio consiste nel assicurarsi che il progetto ContosoUniversity sia impostato come progetto di avvio. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Imposta come progetto di avvio. Le migrazioni Code First cercheranno nel progetto di avvio per trovare la stringa di connessione del database.

Nel menu Strumenti fare clic su Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti.

Selezionare_Console_Del_Gestore_Pacchetti

Nella parte superiore della finestra Console di Gestione pacchetti selezionare ContosoUniversity.DAL come progetto predefinito e quindi al PM> prompt immettere "enable-migrations".

enable-migrations_command

Questo comando crea un file Configuration.cs in una nuova cartella Migrations nel progetto ContosoUniversity.DAL.

Migrations_folder_in_Solution_Explorer

È stato selezionato il progetto DAL perché il comando "enable-migrations" deve essere eseguito nel progetto che contiene la classe di contesto Code First. Quando tale classe si trova in un progetto di libreria di classi, Code First Migrations cerca la stringa di connessione del database nel progetto di avvio per la soluzione. Nella soluzione ContosoUniversity il progetto Web è stato impostato come progetto di avvio. Se non si vuole designare il progetto con la stringa di connessione come progetto di avvio in Visual Studio, è possibile specificare il progetto di avvio nel comando di PowerShell. Per visualizzare la sintassi del comando enable-migrations, è possibile immettere il comando "get-help enable-migrations".

Aprire il file Configuration.cs e sostituire i commenti nel Seed metodo con il codice seguente:

var instructors = new List<Instructor>
{   
    new Instructor { FirstMidName = "Kim",     LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
    new Instructor { FirstMidName = "Fadi",    LastName = "Fakhouri",    HireDate = DateTime.Parse("2002-07-06"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
    new Instructor { FirstMidName = "Roger",   LastName = "Harui",       HireDate = DateTime.Parse("1998-07-01"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
    new Instructor { FirstMidName = "Candace", LastName = "Kapoor",      HireDate = DateTime.Parse("2001-01-15") },
    new Instructor { FirstMidName = "Roger",   LastName = "Zheng",       HireDate = DateTime.Parse("2004-02-12") }
};
instructors.ForEach(s => context.Instructors.AddOrUpdate(i => i.LastName, s));
context.SaveChanges();

var departments = new List<Department>
{
    new Department { Name = "English",     Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 1 },
    new Department { Name = "Mathematics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 2 },
    new Department { Name = "Engineering", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 3 },
    new Department { Name = "Economics",   Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 4 }
};
departments.ForEach(s => context.Departments.AddOrUpdate(d => d.Name, s));
context.SaveChanges();

var courses = new List<Course>
{
    new Course { CourseID = 1050, Title = "Chemistry",      Credits = 3, DepartmentID = 3, Instructors = new List<Instructor>() },
    new Course { CourseID = 4022, Title = "Microeconomics", Credits = 3, DepartmentID = 4, Instructors = new List<Instructor>() },
    new Course { CourseID = 4041, Title = "Macroeconomics", Credits = 3, DepartmentID = 4, Instructors = new List<Instructor>() },
    new Course { CourseID = 1045, Title = "Calculus",       Credits = 4, DepartmentID = 2, Instructors = new List<Instructor>() },
    new Course { CourseID = 3141, Title = "Trigonometry",   Credits = 4, DepartmentID = 2, Instructors = new List<Instructor>() },
    new Course { CourseID = 2021, Title = "Composition",    Credits = 3, DepartmentID = 1, Instructors = new List<Instructor>() },
    new Course { CourseID = 2042, Title = "Literature",     Credits = 4, DepartmentID = 1, Instructors = new List<Instructor>() }
};
courses.ForEach(s => context.Courses.AddOrUpdate(s));
context.SaveChanges();

courses[0].Instructors.Add(instructors[0]);
courses[0].Instructors.Add(instructors[1]);
courses[1].Instructors.Add(instructors[2]);
courses[2].Instructors.Add(instructors[2]);
courses[3].Instructors.Add(instructors[3]);
courses[4].Instructors.Add(instructors[3]);
courses[5].Instructors.Add(instructors[3]);
courses[6].Instructors.Add(instructors[3]);
context.SaveChanges();

I riferimenti per List avere linee ondulate rosse sotto di esse perché non si dispone ancora di un'istruzione using per il relativo spazio dei nomi. Fare clic con il pulsante destro del mouse su una delle istanze di List e scegliere Risolvie quindi fare clic su System.Collections.Generic.

Risolvere con l'istruzione using

Questa selezione di menu aggiunge il codice seguente alle using istruzioni vicino alla parte superiore del file.

using System.Collections.Generic;

Annotazioni

L'aggiunta di codice al Seed metodo è uno dei molti modi in cui è possibile inserire dati fissi nel database. Un'alternativa consiste nell'aggiungere codice ai metodi Up e Down di ogni classe di migrazione. I Up metodi e Down contengono codice che implementa le modifiche al database. Vedrai esempi di questi nell'esercitazione Distribuzione di un aggiornamento del database.

È anche possibile scrivere codice che esegue istruzioni SQL usando il Sql metodo . Ad esempio, se si aggiunge una colonna Budget alla tabella Department e si desidera inizializzare tutti i budget di reparto a $1.000.00 come parte di una migrazione, è possibile aggiungere la riga di codice seguente al Up metodo per tale migrazione:

Sql("UPDATE Department SET Budget = 1000");

Questo esempio illustrato in questa esercitazione usa il metodo AddOrUpdate nel metodo Seed della classe Code First Migrations Configuration. Le migrazioni Code First chiamano il Seed metodo dopo ogni migrazione e questo metodo aggiorna le righe già inserite o le inserisce se non esistono ancora. Il AddOrUpdate metodo potrebbe non essere la scelta migliore per lo scenario in uso. Per altre informazioni, vedere Prendersi cura del metodo AddOrUpdate di EF 4.3 nel blog di Julie Lerman.

Premere CTRL-SHIFT-B per compilare il progetto.

Il passaggio successivo consiste nel creare una DbMigration classe per la migrazione iniziale. Si vuole che questa migrazione crei un nuovo database, quindi è necessario eliminare il database già esistente. I database di SQL Server Compact sono contenuti nei file con estensione sdf nella cartella App_Data . In Esplora Soluzioni, espandere App_Data nel progetto ContosoUniversity per visualizzare i due database di SQL Server Compact, rappresentati dai file .sdf.

Fare clic con il pulsante destro del mouse sul file School.sdf e scegliere Elimina.

sdf_files_in_Solution_Explorer

Nella finestra Console di Gestione pacchetti immettere il comando "Add-migration Initial" per creare la migrazione iniziale e denominarla "Initial".

aggiungi-migrazione_comando

Le migrazioni Code First creano un altro file di classe nella cartella Migrations e questa classe contiene codice che crea lo schema del database.

Nella console di Gestione pacchetti immettere il comando "update-database" per creare il database ed eseguire il metodo Seed.

update-database_command

Se viene visualizzato un errore che indica che esiste già una tabella e non è possibile crearla, è probabile che l'applicazione sia stata eseguita dopo l'eliminazione del database e prima dell'esecuzione update-databasedi . In tal caso, eliminare di nuovo il file School.sdf e ripetere il update-database comando.

Eseguire l'applicazione. Ora la pagina Students è vuota, ma la pagina Instructors contiene gli insegnanti. Questo è ciò che si otterrà nell'ambiente di produzione dopo la distribuzione dell'applicazione.

Empty_Students_page

Pagina_Istruttori_dopo_migrazione_iniziale

Il progetto è ora pronto per distribuire il database School .

Creazione di un database di appartenenza per la distribuzione

L'applicazione Contoso University usa il sistema di appartenenza ASP.NET e l'autenticazione basata su moduli per autenticare e autorizzare gli utenti. Una delle pagine è accessibile solo agli amministratori. Per visualizzare questa pagina, eseguire l'applicazione e selezionare Aggiorna crediti dal menu a comparsa in Corsi. L'applicazione visualizza la pagina Di accesso, perché solo gli amministratori sono autorizzati a usare la pagina Update Credits .The application display the Log In page, because only administrators are authorized to use the Update Credits page.

Log_in_page

Accedere come "admin" usando la password "Pas$w0rd" (si noti il numero zero al posto della lettera "o" in "w0rd"). Dopo l'accesso, viene visualizzata la pagina Aggiorna crediti .

Aggiorna_Crediti_pagina

Quando si distribuisce un sito per la prima volta, è comune escludere la maggior parte o tutti gli account utente creati per il test. In questo caso, si distribuirà un account amministratore e non verranno creati account utente. Anziché eliminare manualmente gli account di test, si creerà un nuovo database di appartenenza con solo l'account utente amministratore necessario nell'ambiente di produzione.

Annotazioni

Il database di appartenenza archivia un hash delle password dell'account. Per distribuire gli account da un computer a un altro, è necessario assicurarsi che le routine di hashing non generino hash diversi nel server di destinazione rispetto a quanto fatto nel computer di origine. Genereranno gli stessi hash quando si usano i provider universali di ASP.NET, purché non si modifichi l'algoritmo predefinito. L'algoritmo predefinito è HMACSHA256 e viene specificato nell'attributo di convalida dell'elemento machineKey nel file Web.config.

Il database di appartenenza non viene gestito dalle migrazioni Code First e non è presente alcun inizializzatore automatico che esegue il seeding del database con account di test (come per il database School). Pertanto, per mantenere disponibili i dati di test, è necessario creare una copia del database di test prima di crearne una nuova.

In Esplora soluzioni rinominare il file aspnet.sdf nella cartella App_Data in aspnet-Dev.sdf. Non crearne una copia, rinominalo - creerai immediatamente un nuovo database.

In Esplora soluzioni assicurarsi che il progetto Web (ContosoUniversity, non ContosoUniversity.DAL) sia selezionato. Nel menu Progetto selezionare ASP.NET Configurazione per eseguire lo strumento di amministrazione del sito Web(WAT).

Seleziona la scheda Sicurezza.

WAT_Security_tab

Fare clic su Crea o gestisci ruoli e aggiungere un ruolo di amministratore .

WAT_Create_New_Role

Tornare alla scheda Sicurezza , fare clic su Crea utente e aggiungere l'utente "admin" come amministratore. Prima di fare clic sul pulsante Crea utente nella pagina Crea utente , assicurarsi di selezionare la casella di controllo Amministratore . La password usata in questa esercitazione è "Pas$w0rd" ed è possibile immettere qualsiasi indirizzo di posta elettronica.

WAT_Create_User

Chiudere il browser. In Esplora soluzioni fare clic sul pulsante Aggiorna per visualizzare il nuovo file aspnet.sdf .

New_aspnet.sdf_in_Solution_Explorer

Fare clic con il pulsante destro del mouse su aspnet.sdf e scegliere Includi nel progetto.

Distinguere lo sviluppo dai database di produzione

In questa sezione verranno rinominati i database in modo che le versioni di sviluppo siano School-Dev.sdf e aspnet-Dev.sdf e le versioni di produzione siano School-Prod.sdf e aspnet-Prod.sdf. Questa operazione non è necessaria, ma in questo modo è possibile evitare di ottenere versioni di test e produzione dei database confuse.

In Esplora soluzioni fare clic su Aggiorna ed espandere la cartella App_Data per visualizzare il database School creato in precedenza; fare clic con il pulsante destro del mouse su di esso e selezionare Includi nel progetto.

Including_School.sdf_in_project

Rinominare aspnet.sdf in aspnet-Prod.sdf.

Rinominare School.sdf in School-Dev.sdf.

Quando si esegue l'applicazione in Visual Studio non si vogliono usare le versioni -Prod dei file di database, si vogliono usare le versioni -Dev . È quindi necessario modificare le stringhe di connessione nel file Web.config in modo che puntino alle versioni -Dev dei database. Non è stato creato un file School-Prod.sdf, ma è OK perché Code First creerà tale database nell'ambiente di produzione la prima volta che si esegue l'app.

Aprire l'applicazione Web.config file e individuare le stringhe di connessione:

<configuration>
  <!-- Settings -->
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet.sdf" providerName="System.Data.SqlServerCe.4.0" />
    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>
  <!-- Settings -->
</configuration>

Modificare "aspnet.sdf" in "aspnet-Dev.sdf" e modificare "School.sdf" in "School-Dev.sdf":

<configuration>
  <!-- Settings -->
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet-Dev.sdf" providerName="System.Data.SqlServerCe.4.0" />
    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School-Dev.sdf" providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>
  <!-- Settings -->
</configuration>

Il motore di database di SQL Server Compact e entrambi i database sono ora pronti per la distribuzione. Nell'esercitazione seguente, configurerai trasformazioni automatiche del file Web.config per impostazioni diverse nei diversi ambienti di sviluppo, test e produzione. Tra le impostazioni che devono essere modificate sono le stringhe di connessione, ma queste modifiche verranno configurate in un secondo momento quando si crea un profilo di pubblicazione.

Altre informazioni

Per altre informazioni su NuGet, vedere Gestire le librerie di progetti con NuGet e la documentazione di NuGet. Se non si vuole usare NuGet, è necessario apprendere come analizzare un pacchetto NuGet per determinare le operazioni da eseguire quando viene installato. Ad esempio, potrebbe configurare Web.config trasformazioni, configurare gli script di PowerShell da eseguire in fase di compilazione e così via. Per altre informazioni sul funzionamento di NuGet, vedere Creazione e pubblicazione di un pacchetto e trasformazioni di file di configurazione e codice sorgente.