2017-05-23 2 views
0

Nous avons une application qui lit les fichiers Microsoft Excel (.xls, .xlsx, .xlsm).(VS Team Services) Solution de construction: Le nom de type ou d'espace de noms 'Office' n'existe pas dans l'espace de noms 'Microsoft'

Il fonctionne très bien:

Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 
Excel.Range range; 
int rCnt; 
int cCnt; 
int rw = 0; 
int cl = 0; 
xlApp = new Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Open(full_filename, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
range = xlWorkSheet.UsedRange; 
rw = range.Rows.Count; 
cl = range.Columns.Count; 
for (rCnt = 1; rCnt <= rw; rCnt++) 
{ 
    List<object> rowList = new List<object>(); 
    for (cCnt = 1; cCnt <= cl; cCnt++) 
    { 
     // do stuff 
    } 
} 
xlApp.Quit(); 
Marshal.ReleaseComObject(xlWorkSheet); 
Marshal.ReleaseComObject(xlWorkBook); 
Marshal.ReleaseComObject(xlApp); 

La question est dans l'équipe Visual Studio Services, il provoque l'erreur suivante au cours du processus de construction:

Le nom du type ou espace de noms 'Office' ne n'existe pas dans l'espace de noms 'Microsoft' (manque-t-il une référence d'assemblage?)

Que devrions-nous installer sur Visual St udio tel que Team Services serait capable de construire votre application? Merci

+1

Avez-vous la référence 'Microsoft.Office.Interop' ajoutée à votre projet dans le dossier de référence ou le dossier lib? – Akhilesh

+0

J'ai une référence comme ceci: 'using Excel = Microsoft.Office.Interop.Excel;' –

Répondre

1

Vous devriez obtenir un avertissement au sujet d'un ensemble manquant (en particulier Microsoft.Office.Interop.Excel) avant que l'erreur , un ensemble ne sont pas disponibles (sur le GAC) sur le Hosted Construire agent VSTS.

La solution est de tirer parti de ce Nuget package Microsoft.Office.Interop.Excel et de référencer les assemblys fournis par ce paquet Nuget dans votre projet.

Ensuite, la génération fonctionnera dans tous les cas tant que vous utiliserez la tâche de génération Nuget Restore avant la génération proprement dite.

+0

Je me demande, j'avais déjà la référence à 'Microsoft.Office.Interop', pourquoi est-il nécessaire d'ajouter dans Nuget? Comment cela fonctionnait-il sans cela? –

+1

car la référence doit pointer vers un fichier ** existant **. Nuget est la manière standard de s'assurer que toutes les dépendances sont en place (c'est-à-dire existantes) lors de la compilation. Et bien sûr, vous ne devez pas ajouter de paquets Nuget au contrôle source (par exemple, à un repo Git), ils doivent être restaurés pendant la construction (soit avec VS, soit avec VSTS sur un agent de construction). –