我有一个Windows Forms应用程序,可以部署到整个网络中的许多用户计算机上。我们的一些用户拥有Excel 2010,其中一些拥有2013年,另一些拥有2016年。
过去,我已指示开发人员使用Interop版本14进行编译,以确保不同版本之间的互操作性。不幸的是,有几次,这个请求没有得到尊重,我们遇到了用户问题。
了解我不是唯一的编码,如何最好地确保在编译应用程序时,使用interop版本14进行编译。
我考虑过的一些选项包括:
寻找任何建议。感谢。
答案 0 :(得分:0)
我根本不会使用互操作。很多事情都可能出错。我会使用像NPOI或OpenXML sdk这样的库来创建电子表格。
https://github.com/tonyqus/npoi
https://msdn.microsoft.com/en-us/library/office/bb448854.aspx
答案 1 :(得分:0)
我有一个方法,我将放入DLL:
''' <summary>
''' Checks the Version of Excel
''' It's Purpose Is To Ensure We Don't Deploy Wrong Interop Version
''' </summary>
''' <remarks></remarks>
Public Shared Sub CheckVersion(ByVal typeName As String, ByVal maximumVersion As Integer)
Try
Dim a2 As System.Reflection.Assembly = System.Reflection.Assembly.ReflectionOnlyLoad(typeName)
Dim majorVersion As Integer = a2.GetName().Version.Major
If majorVersion > maximumVersion Then
Throw New ApplicationException("Invalid Version of " & typeName & " - Using Version " & majorVersion & " - Maximum Allowed Version " & maximumVersion)
End If
Catch iex As System.IO.FileNotFoundException
Trace.WriteLine("VersionChecker - CheckVersion " & iex.Message & Environment.NewLine & iex.StackTrace)
Throw New ApplicationException("File Not Found " & typeName & " - Note only works for interop types when Embed interop types is disabled and CopyLocal is true.", iex)
Catch ex As Exception
Trace.WriteLine("VersionChecker - CheckVersion " & ex.Message & Environment.NewLine & ex.StackTrace)
Throw ex
End Try
End Sub
然后将它放入程序中:
VersionChecker.CheckVersion("Microsoft.Office.Interop.Excel", 14)
如果他们在程序的负载上使用了错误的那个,那就会炸弹,确保他们总能正确行事。
我不会接受,或许会有更好的事情发生。