问题与Excel和.NET 4.0 / 4.5使用Office Interop

我有以下的代码,当我的目标.NET 3.5工作正常:

Microsoft.Office.Interop.Excel.Application _excelInstance; Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet; Microsoft.Office.Interop.Excel.Workbook _excelWorkbook; _excelInstance = new Microsoft.Office.Interop.Excel.Application(); _excelWorkbook = _excelInstance.Workbooks.Add(); _excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1); 

但是,当我定位.NET 4.5时,编译器给出了上面最后一行的以下错误:

编译dynamicexpression式所需的一个或多个types无法find。 你错过了一个参考吗?

我无法针对此项目的.NET 3.5,它必须是4.0或4.5。

任何想法会导致这一点,或者我应该如何去解决这个问题?

谢谢。

编辑 –

这是entier类:

 public class ExcelWriter : IDisposable { private string _outputFile; public ExcelWriter(string outputFile) { _outputFile = outputFile; } public void Write(List<string[]> data) { Microsoft.Office.Interop.Excel.Application _excelInstance; Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet; Microsoft.Office.Interop.Excel.Workbook _excelWorkbook; _excelInstance = new Microsoft.Office.Interop.Excel.Application(); _excelWorkbook = _excelInstance.Workbooks.Add(); _excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1); int rowNumber = 1; foreach (var row in data) { int columnNumber = 1; foreach (var field in row) { _excelWorksheet.Cells[rowNumber, columnNumber] = field; columnNumber++; } rowNumber++; } if (File.Exists(_outputFile)) { File.Delete(_outputFile); } _excelWorkbook.SaveAs(_outputFile); _excelWorkbook.Close(); _excelInstance.Quit(); } public void Dispose() { if (File.Exists(_outputFile)) { File.Delete(_outputFile); } } } 

是的,当您将.NET 4.0及更高版本添加到Microsoft.Office.Interop.Excel互操作程序集时,Exceltypes库的翻译将有所不同。 它将利用添加的dynamic关键字。 在Office interop中有很多使用,它是一个在许多地方返回“变体”的对象模型。 以前他们被翻译成对象 ,现在变成dynamic的

这需要一个不属于你的项目的框架组件。 可能是因为你从之前的VS版本转换而来。

右键单击项目的引用节点,添加引用,selectMicrosoft.CSharp。