错误:无法加载文件或程序集"ExcelAddIn1.XmlSerializers"或其中一个依赖项.该系统找不到指定的文件

Tin*_*ina 6 .net json publish vsto xmlserializer

我有一个excel的加载项目.它在我的电脑上工作正常.但是,当我在客户端计算机上安装它时,它给了我提到的错误消息.

  1. 我使用project-> properties-> publish发布了它.
  2. 我勾选了"启用我的代码".
  3. 我清除了'抛出'和'用户未处理'的'未找到文件异常'的刻度
  4. 我在客户端上使用项目文件夹中"publish"文件夹中的"setup"文件设置项目.
  5. 在publish-> prerequisites中,我勾选了这些项目:

    .net框架sp1

    Microsoft .net框架4

    Microsoft Office 2007主互操作程序集

    用于办公室运行时的Microsoft visual studio 2010工具

    Windows安装程序4.5

  6. 我正在使用JSON.这是我班级的代码:

    [Serializable]
    [JsonObject(MemberSerialization.OptIn)]
    public class documentSchemaRestInfo
    {
        [System.Runtime.Serialization.DataMember]
        [JsonProperty]
        public double id { get; set; }
        [System.Runtime.Serialization.DataMember]
        [JsonProperty]
        public string name { get; set; }
    
        [System.Runtime.Serialization.DataMember]
        [JsonProperty]
        public string description { get; set; }
    
        [System.Runtime.Serialization.DataMember]
        [JsonProperty]
        public string[] fields { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    //*********************

  7. 使用该类的代码:

    public List<DocumentField> getSchemaOfGroup(documentGroupPk groupPK)
    {
        List<DocumentField> result = new List<DocumentField>();
        HttpWebRequest request = (HttpWebRequest)WebRequest.
            Create(ProxyFactory.baseAddress+"/services/rest/group/" 
            + groupPK.id + "/schema");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
        StreamReader streamReader = new StreamReader(response.GetResponseStream());
        string responseBody = streamReader.ReadToEnd();
    
        dynamic ds = ((dynamic)JsonConvert.DeserializeObject(responseBody))
            .documentSchemaRestInfo;
        foreach (dynamic f in ds.fields)
        {
            result.Add(new DocumentField(
                f.name.ToString(),f.internalName.ToString(),false));
        }
        return result;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  8. 客户端计算机上安装了Excel 2010.

  9. 这是抛出异常的代码行:

       excelApp = (Excel.Application) 
       System.Runtime.InteropServices.Marshal.GetActiveObject
       ("Excel.Application");
    
    Run Code Online (Sandbox Code Playgroud)
  10. 奇怪的是,当我按照以下步骤操作时它会起作用:在客户端上运行它并获得异常.在我自己的PC上运行它(没有异常发生).在客户端计算机的应用程序上按下我制作的Excel功能区上的加载项按钮,这次我没有得到任何异常!我检查了很多次.每次我按照这个顺序,它工作正常!

11. 这是异常的堆栈跟踪

非常感谢提前.

编辑:12.我的应用程序的工作方式如下:用户第一次点击功能区上的按钮时,会出现登录表单,如果他被授权,则会显示他要求的表单.下一次出现问题表格.只有第一次点击时才会发生异常.这是我的代码:(最后一行没有异常,但第7行的情况不是这样)

            1.//If there is no ticket, means we haven't had a successfull login yet.=> 
            2.// We should show the login form instead of groups form.
            3.if (string.IsNullOrEmpty(ProxyFactory.ticket))
            4.{
            5.  okOrCancel = new LoginForm().ShowDialog();
            6.    if (okOrCancel == DialogResult.OK)
            7.        new GroupsForm().ShowDialog();
            8.}
            9.//If the is a ticket, means we have had a successful login.
            10.else 
            11.    new GroupsForm().ShowDialog();
Run Code Online (Sandbox Code Playgroud)

Pet*_*tin 2

仅查看代码 Spinets 有点令人困惑,但从问题的标题我可以猜测您在动态创建序列化程序集时遇到问题(安全问题或部分信任问题)。您可以尝试通过转到项目属性/构建并从列表中选择“关闭”,将 Addin dll 中的“生成序列化程序集”关闭。