编译器参数.ReferencedAssemblys-添加互操作程序集(Microsoft.Office.interop.



我正在创建一个方法,该方法将自动创建Excel文件。Excel文件(格式)的外观将取决于给定的VB.NET脚本。现在我在引用程序集Microsoft时遇到了一个问题。办公室Interop。Excel.dll。下面是我的示例代码:

Imports System.CodeDom.Compiler
Imports Microsoft.Office.Interop
Public Class ExcelScript
   Public Sub ExecuteExcelScript(VBCode As String, ds As DataSet)
      Dim provOptions As New Dictionary(Of String, String)
      provOptions.Add("CompilerVersion", "v4.0")
      Dim vbProvider As New VBCodeProvider(provOptions)
      Dim vbParameter As New CompilerParameters
      Dim compResults As CompilerResults = Nothing
      VBCode = "Imports System" & vbNewLine &
         "Imports System.Data" & vbNewLine &
         "Imports System.Data.SqlClient" & vbNewLine &
         "Imports Microsoft.Office.Interop" & vbNewLine &
         "Public Class GenerateExcel" & vbNewLine &
         "Public Sub GenerateExcelFromScript(ds As DataSet)" & vbNewLine &
         VBCode & vbNewLine &
         "End Sub" & vbNewLine &
         "End Class"
      vbParameter.ReferencedAssemblies.Add("System.dll")
      vbParameter.ReferencedAssemblies.Add("System.Data.dll")
      vbParameter.ReferencedAssemblies.Add("System.Xml.dll")
      vbParameter.ReferencedAssemblies.Add("Microsoft.Office.Interop.Excel.dll")
      vbParameter.GenerateExecutable = False
      vbParameter.GenerateInMemory = True
      vbParameter.OutputAssembly = "ExcelGenerator"
      compResults = vbProvider.CompileAssemblyFromSource(vbParameter, VBCode)
   End Sub
End Class

上面的代码不起作用,并返回一个错误,即文件Microsoft。办公室Interop。找不到Excel.dll。但如果我这样指定dll的绝对路径,它就会起作用:

      vbParameter.ReferencedAssemblies.Add("C:Program Files (x86)Microsoft Visual Studio 14.0Visual Studio Tools for OfficePIAOffice15Microsoft.Office.Interop.Excel.dll")

我无法将具有绝对路径的程序部署到我们的最终用户,因为他们可能安装了不同版本的Microsoft Office,并且他们的Excel互操作程序集的位置也可能不同。当部署到另一台电脑时,是否有其他方法可以引用此程序集或获取要引用的程序集的完整路径?

Mmm,如何最好地解释这一点。。。

。NET Framework通过(P)IAs=(主要-由软件制造商优化)互操作程序集与COM Office应用程序交互。这些在COM*.tlbs和。NET语言。

从2003版开始,微软通过Office分发了PIA;从2007版开始,这些都是自动安装的。它们被安装到Windows GAC(全局程序集缓存)中。所有与PIA一起工作的代码都应该与GAC中的代码一起工作。

对PIA的引用可以从"添加引用"中的COM选项卡中获取,这些引用将始终引用GAC。由于许多开发人员对必须从COM选项卡添加引用感到困惑,Visual Studio开始分发一组带有VS的PIA,这些PIA出现在上。NET选项卡。这些是特定于版本的(VS版本发布时的Office版本),当然路径是静态的(正如您所看到的),但。NET应用程序将自动重新映射到GAC,所以通常这不会是一个问题。

看起来你可以使用参考GAC文件夹的位置

%windir%assembly - prior to .NET 4.0
%windir%Microsoft.NETassembly - NET 4.0

另请参见在哪里。NET Framework全局程序集缓存?,尤其是安装到GAC 的DLL的(物理)(已安装)路径

如果这仍然是一个问题,您可以使用tlbImp.exe生成一组IA,并将它们与您的解决方案一起分发。然后你会有一个具体的路径,你可以参考。

尝试在导入中使用它"导入Excel=Microsoft.Office.Interop.Excel",我用这种方式创建Excel文档。

相关内容

最新更新