找不到方法:'System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid)'

时间:2013-12-07 11:30:28

标签: c# interop visual-studio-2013

我花了很多时间在我的开发盒上编写这个程序,把它移到我们的生产盒后我得到了下面的错误。只是一个FYI我无法控制已安装的内容和可安装的内容,我该如何使其工作?在两台计算机的两个框架下,我们都有v1.0.3705,v1.1.4322,v2.0.50727,v3.0,v3.5,4.0.30319。我用来创建应用程序的程序也是Visual Studio 2013 Pro。

由于

  

有关调用实时的详细信息,请参阅此消息的结尾   (JIT)调试而不是此对话框。

     

** * ** 异常文字 ** * **** System.MissingMethodException:找不到方法:'System.Type   System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(的System.Guid)”。   在C_Sharp_version.Form1.button4_Click(Object sender,EventArgs e)
  在System.Windows.Forms.Control.OnClick(EventArgs e)at   System.Windows.Forms.Button.OnClick(EventArgs e)at   System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)at at   System.Windows.Forms.Control.WmMouseUp(Message& m,MouseButtons   按钮,Int32点击)at   System.Windows.Forms.Control.WndProc(Message& m)at   System.Windows.Forms.ButtonBase.WndProc(Message& m)at   System.Windows.Forms.Button.WndProc(Message& m)at   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)   在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&   m)在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32)   msg,IntPtr wparam,IntPtr lparam)

     

** * ** 已加载的程序集 ** * **** mscorlib       汇编版本:4.0.0.0       Win32版本:4.0.30319.239(RTMGDR.030319-2300)       CodeBase:file:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll   ---------------------------------------- C夏普版       汇编版本:1.0.0.0       Win32版本:1.0.0.0       CodeBase:file:/// gordonc $ / Desktop / C%20Sharp%20version%20(2).exe   ---------------------------------------- System.Windows.Forms       汇编版本:4.0.0.0       Win32版本:4.0.30319.235由:RTMGDR构建       CodeBase:file:/// C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll   ---------------------------------------- System.Drawing       汇编版本:4.0.0.0       Win32版本:4.0.30319.1由:RTMRel构建       CodeBase:file:/// C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll   ----------------------------------------系统       汇编版本:4.0.0.0       Win32版本:4.0.30319.236由:RTMGDR构建       CodeBase:file:/// C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Word;


namespace C_Sharp_version
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, object findText, object replaceWithText)
        {
            //options
            object matchCase = false;
            object matchWholeWord = true;
            object matchWildCards = false;
            object matchSoundsLike = false;
            object matchAllWordForms = false;
            object forward = true;
            object format = false;
            object matchKashida = false;
            object matchDiacritics = false;
            object matchAlefHamza = false;
            object matchControl = false;
            object read_only = false;
            object visible = true;
            object replace = 2;
            object wrap = 1;
            //execute find and replace
            doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
                ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
                ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openInfDoc = new OpenFileDialog();

            if (openInfDoc.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string strInfDocLocation = openInfDoc.FileName;

                MessageBox.Show(strInfDocLocation);
                InfDocLocationtxt.Text = strInfDocLocation; 
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog openNetdoc = new OpenFileDialog();
            if (openNetdoc.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string strNetDocLocation = openNetdoc.FileName;

                MessageBox.Show(strNetDocLocation);
                NetDocLocationtxt.Text = strNetDocLocation;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog openChkdoc = new OpenFileDialog();
            if (openChkdoc.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string strChkDocLocation = openChkdoc.FileName;

                MessageBox.Show(strChkDocLocation);
                ChkDocLocationtxt.Text = strChkDocLocation;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, InfDocLocationtxt.Text);
            Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true };
            Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true);
            aDoc.Activate();
            FindAndReplace(wordApp, "<ServerName>", textBox1.Text);
            FindAndReplace(wordApp, "<Domain>", textBox2.Text);
            FindAndReplace(wordApp, "<Ip>", textBox3.Text);
            FindAndReplace(wordApp, "<Engineer>", textBox4.Text);
            FindAndReplace(wordApp, "<Date>", textBox5.Text);
            FindAndReplace(wordApp, "<Project>", textBox6.Text);
            FindAndReplace(wordApp, "<Cluster>", textBox7.Text);
            FindAndReplace(wordApp, "<DocNumber>", textBox8.Text);
            FindAndReplace(wordApp, "<Author>", textBox9.Text);


        }

        private void button7_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {
            object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, NetDocLocationtxt.Text);
            Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true };
            Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true);
            aDoc.Activate();
            FindAndReplace(wordApp, "<ServerName>", textBox1.Text);
            FindAndReplace(wordApp, "<Domain>", textBox2.Text);
            FindAndReplace(wordApp, "<Ip>", textBox3.Text);
            FindAndReplace(wordApp, "<Engineer>", textBox4.Text);
            FindAndReplace(wordApp, "<Date>", textBox5.Text);
            FindAndReplace(wordApp, "<Project>", textBox6.Text);
            FindAndReplace(wordApp, "<Cluster>", textBox7.Text);
            FindAndReplace(wordApp, "<DocNumber>", textBox8.Text);
            FindAndReplace(wordApp, "<Author>", textBox9.Text);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, ChkDocLocationtxt.Text);
            Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true };
            Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true);
            aDoc.Activate();
            FindAndReplace(wordApp, "<ServerName>", textBox1.Text);
            FindAndReplace(wordApp, "<Domain>", textBox2.Text);
            FindAndReplace(wordApp, "<Ip>", textBox3.Text);
            FindAndReplace(wordApp, "<Engineer>", textBox4.Text);
            FindAndReplace(wordApp, "<Date>", textBox5.Text);
            FindAndReplace(wordApp, "<Project>", textBox6.Text);
            FindAndReplace(wordApp, "<Cluster>", textBox7.Text);
            FindAndReplace(wordApp, "<DocNumber>", textBox8.Text);
            FindAndReplace(wordApp, "<Author>", textBox9.Text);
        }


    }
}

1 个答案:

答案 0 :(得分:15)

在我看来,这是.NET Framework compatibility问题。

问题:您已在本地计算机上使用更高版本的.NET Framework开发了应用程序,并在具有较低版本.NET Framework的远程PC上运行该应用程序。

注意:如果您将应用程序定位为Heigher版本的.NET Framework,则它将无法在较低版本上运行。

解决方案:您需要将其定位到远程PC上可用的.NET Framework较低版本,以便在远程PC上运行。

第1步:右键点击project - 选择properties

第2步:Target Framework.NET Framework x.x更改为.NET Framework x.y

注意:x.x更高,x.y是远程PC或更低版本的低版本。