使用版本重定向解决以COM方式调用Excel程序集版本不一致问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用版本重定向解决以COM方式调用Excel程序集版本不一致问题相关的知识,希望对你有一定的参考价值。

以COM方式调用Excel,由于开发环境与目标终端程序集版本的不一致,导致目标端程序无法使用。

下面调用COM组件打开Excel文件。如图,先在开发环境添加COM引用

技术分享

代码如下:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "*.xls|*.xls|*.xlsx|*.xlsx";
            dialog.Multiselect = false;
            dialog.FileOk += Dialog_FileOk;
            dialog.ShowDialog();
        }

        private void Dialog_FileOk(object sender, CancelEventArgs e)
        {
            OpenFileDialog dialog = sender as OpenFileDialog;
            if (dialog != null)
            {
                String FileName = dialog.FileName;

                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                excel.Visible = true;
                Microsoft.Office.Interop.Excel.Workbooks books = excel.Workbooks;
                books.Open(FileName);
                
                //excel.Quit();
            }
        }       
    }
}

将编译后的程序XCOPY到客户端,执行报错信息如下:

技术分享

提示未能加载文件或程序集”Microsoft.Office.Interop.Excel,Version=15.0.0.0”,该程序集版本为开发环境下的版本,如图

技术分享

而目标环境中该程序集版本为12.0.0.0

技术分享

在目标环境中添加可配置文件WindowsFormsApplication4.exe.config文件

技术分享

内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Office.Interop.Excel"
        publicKeyToken="71e9bce111e9429c"
        culture="neutral" />
        <bindingRedirect
          oldVersion="15.0.0.0"
          newVersion="12.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

通过配置文件,重定向程序集版本,如下,旧版:15.0.0.0为开发环境版本,新版:12.0.0.0为目标环境版本。通过版本重定向后,目标终可以操作Excel文件了。

技术分享

以上是关于使用版本重定向解决以COM方式调用Excel程序集版本不一致问题的主要内容,如果未能解决你的问题,请参考以下文章

C# 程序集绑定重定向 - Newtonsoft.Json

自定义设置程序集版本重定向和程序集位置的信息

React Router 4 如何在函数内以编程方式重定向? [复制]

程序集绑定重定向不起作用

依赖程序集绑定重定向

RDP协议集音频输出音频输入重定向虚拟通道