Ich erstelle eine Methode, die automatisch eine Excel-Datei erstellt. Das Erscheinungsbild der Excel-Datei (Format) hängt vom angegebenen VB.NET-Skript ab. Jetzt habe ich ein Problem in Bezug auf die Assembly Microsoft.Office.Interop.Excel.dll verweisen. Hier ist mein Beispielcode unten:CompilerParameters.ReferencedAssemblies - Hinzufügen von Interop-Assemblies (Microsoft.Office.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
Der obige Code funktioniert nicht und gibt einen Fehler zurück, dass die Datei Microsoft.Office.Interop.Excel.dll nicht gefunden werden kann. Aber es wird funktionieren, wenn ich den absoluten Pfad der DLL wie folgt angeben:
vbParameter.ReferencedAssemblies.Add("C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll")
Ich kann nicht das eine mit dem absoluten Pfad zu unserer Endbenutzer bereitstellen, da sie unterschiedliche Versionen von Microsoft Office haben könnten installiert und die Lage ihrer Excel-Interop-Assembly könnte auch anders sein. Gibt es eine andere Möglichkeit, diese Assembly zu referenzieren oder den vollständigen Pfad dieser Assembly zu erhalten, auf die bei der Implementierung auf einem anderen PC verwiesen wird?
Ihre Antwort löst mein Problem und ich danke Ihnen auch dafür, dass Sie konkrete Informationen gegeben haben, insbesondere in Bezug auf die Unterschiede von IAs, die in GAC und in den VS-Verzeichnissen gefunden werden können.Zurück zu meiner Anwendung Ich werde nur auf den GAC verweisen und möglicherweise eine Methode hinzufügen, die nach dem Excel-Interop suchen wird, da der Pfad in GAC immer noch anders sein kann, da möglicherweise verschiedene Versionen von Microsoft Office pro Client-PC installiert sind. – cod3n00b