使用版本重定向解决以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文件了。

时间: 2024-08-07 20:29:32

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

引用的Nhibernate程序集版本和FluentNhibernate使用的Nhibernate版本不一致,导致未能加载文件或程序集“NHibernate, Version=3.0.0.2001错误

由于引用的FluentNhibernate使用的Nhibernate是另外一个版本的,而自己添加的版本是不同版本,导致此问题.NuGet重新添加最新版本的FluentNhibernate. 或者在配置文件中添加版本重定向,new VerSion为自己添加Nhibernate版本,oldVersion为FluentNhiberbate使用的版本 <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-

解决未能加载文件或程序集&#39;WebGrease‘的问题

在多个视图中,如果有使用共用的样式代码,可以把它们移至CSS文件中去.今天Insus.NET就举例一个例子来说明.比如前2篇中<ASP.NET MVC图片管理(上传,预览与显示)>http://www.cnblogs.com/insus/p/4620420.html 和<ASP.NET MVC图片管理(删除)>http://www.cnblogs.com/insus/p/4623507.html 均有使用样式代码,如下: div, span, font, a, td { font-

Java高并发,如何解决,什么方式解决

对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧. 为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步    1.同步和异步的区别和联系 所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令. 异步,执行完函数或方法

jquery ajax跨域的完美解决方法(jsonp方式)

ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码 今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式.分别是JQuery的 jquery.ajax jsonp格式和jquer

RTX——第19章 SVC 中断方式调用用户函数(后期补历程)

本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式时,任务中是不允许访问特权级寄存器的,这个时候使用 SVC 中断,此问题就迎刃而解了. SVC 功能介绍SVC 用于产生系统函数的调用请求.例如,操作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件.因此,当用户程序想要控制特定的硬件时,它就要产生一个 SVC 异常,然后操作系统提供的SVC

系统优化(一)Maven打包同一个jar有不同的:版本+时间戳(解决思路)

解决:maven仓库的ear里面有很多个相同的jar(只是包含不同的:版本+时间戳) 问题描述: 发现ear里面有很多个相同的jar,只是包含不同的:版本+时间戳,如下图所示: (例如:itoo-basic-api有很多相同的jar,只是包含不同的:版本+时间戳) 解决思路 用权限的itoo-authority-usergroup-ear模块进行测试 1.怀疑是:maven的坐标,时间戳的问题 关键字: maven snapshot maven war中同一个jar有很多不同版本 maven 本

关于centos7中使用rpm方式安装mysql5.7版本后无法使用root登录的问题

最近在centos7中通过rpm方式安装了最新版本的mysql-server 5.7 (mysql57-community-release-el7-7.noarch.rpm) ,发现安装成功后无法使用root登录.百度google一番无果,最后在官方文档中找到了答案.现记录完整安装及问题解决过程,希望能帮助到其他朋友. OS版本: Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911

【C#进阶系列】03 配置文件管理与程序集的引用版本重定向

先来点与标题不相关的: CLR支持两种程序集:弱命名程序集和强命名程序集. 两者的区别在于强命名程序集使用发布者的公钥和私钥进行签名.由于程序集被唯一性地标识,所以当应用程序绑定到强命名程序集时,CLR可以应用一些已知安全的策略. 程序集可以采用两种方式部署:私有或者全局.弱命名程序集只能以私有方式部署. 在<CLR via C#>的第三章主要讲了私有部署和全局部署的具体内容,以及弱命名程序集和强命名程序集. 但是老实说一般情况下确实用不到这些东西,所以这里就不写了. 还有一个就是对CLR如何

svn冲突问题详解 SVN版本冲突解决详解

(摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲突解决,这样才能提交更新.冲突发生时,subversion会在WorkCopy中保存所有的目标文件版本(上次更新版本.当前获取的版本,即别人提交的版本.自己更新的版本.目标文件. 开发人员都知道代码管理工具是开发中一个必不可少的工具,这里也不废话详细介绍了.不管你个人喜欢git还是svn还是其他,但