.net 错误:无法加载文件或程序集';ExcelAddIn1.XmlSerializers';或者其中一个';它的依赖性。系统找不到指定的文件

.net 错误:无法加载文件或程序集';ExcelAddIn1.XmlSerializers';或者其中一个';它的依赖性。系统找不到指定的文件,.net,json,vsto,publish,xmlserializer,.net,Json,Vsto,Publish,Xmlserializer,我有一个excel的外接程序项目。它在我的电脑上运行得很好。但是当我在客户端机器上安装它时,它会给我我提到的错误消息 我已经使用project->properties->publish发布了它 我勾选了“仅启用我的代码” 我已清除了“未找到文件异常”的“抛出”和“用户未处理”标记 我使用项目文件夹中“发布”文件夹中的“设置”文件在客户端上设置项目 在发布->先决条件中,我勾选了以下项目: .NETFramework sp1 Microsoft.net framework 4 Microsoft

我有一个excel的外接程序项目。它在我的电脑上运行得很好。但是当我在客户端机器上安装它时,它会给我我提到的错误消息

  • 我已经使用project->properties->publish发布了它
  • 我勾选了“仅启用我的代码”
  • 我已清除了“未找到文件异常”的“抛出”和“用户未处理”标记
  • 我使用项目文件夹中“发布”文件夹中的“设置”文件在客户端上设置项目
  • 在发布->先决条件中,我勾选了以下项目:

    .NETFramework sp1

    Microsoft.net framework 4

    Microsoft office 2007主互操作程序集

    Microsoft visual studio 2010 office运行时工具

    Windows installer 4.5

  • 我使用的是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; }
    }
    
    //************************************************************

  • 使用该类的代码:

    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;
    }
    
  • 奇怪的是,当我遵循以下步骤时,它会起作用: 在客户端上运行它并获取异常。 在我自己的电脑上运行(没有异常发生)。 在客户端计算机的应用程序上,按我制作的Excel功能区上的外接程序按钮 这次我没有任何例外!! 我检查了很多次。每次我按照这个命令,它的工作很好

  • 十一,。

    先谢谢你

    编辑: 12我的应用程序的工作原理如下: 用户第一次单击功能区上的“我的”按钮时,将显示登录表单, 如果他得到授权,他要求的表格就会出现。 下一次只显示所请求的表单。 第一次点击时就会发生异常。 以下是我的代码: (最后一行没有出现异常, 但第7行的情况并非如此)


    您是否包含了对以下内容的引用?

    您确定客户端已安装.NET 4.0吗?

    仅查看代码spinets有点让人困惑,但从问题的标题,我可以猜您在动态创建序列化程序集方面有问题(安全问题或部分信任问题)。您可以通过转到project properties/Build并从列表中选择Off,尝试将加载项dll中的“Generate serialization assembly”(生成序列化程序集)关闭。

    我从未使用过Excel加载项,但我创建了一些Visual Studio扩展,错误提醒我当时混淆了扩展的注册表路径。对于VS,注册表中有两个路径要考虑,一个用于64位,一个用于32位。 你查过注册表了吗

    试试看

    项目>属性>生成选项卡>生成序列化程序集>设置


    @Iravanchi发生故障的客户端上的事件日志是否提供了无法加载的程序集的详细信息?@J.Tihon我不确定,我必须检查一下。当我这样做时,我会在这里发布。@J.Tihon在安装发布的软件包期间记录了一个错误,但它与.NET framework检查有关。但这很奇怪,因为已经安装了完全相同的.NET framework版本。即使我在开发机器和部署机器上检查了.NET framework版本,它们都是相同的,但问题并没有出现在开发机器上。我不认为这是一个框架安装问题,因为应用程序有时会工作。如果框架不存在,它就不应该工作。如果可能重复“是”,则问题与应用程序生成的程序集有关。但奇怪的是,它在“某些时候”起作用,即使它不起作用,如果你“坚持”,它也会开始起作用!所以我最好的猜测是一些线程问题,这意味着有人试图在另一个线程上实际创建程序集之前加载程序集。你真是个天才!我已经处理这件事好几天了。谢谢。我真的很感谢你的帮助。谢谢。我远离天才:)。。。以前不得不处理这些事情。谢谢你的回复。是的,我对登记处很小心。
       excelApp = (Excel.Application) 
       System.Runtime.InteropServices.Marshal.GetActiveObject
       ("Excel.Application");
    
                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();