ошибка: не удалось загрузить файл или сборку «ExcelAddIn1.XmlSerializer» или одну из ее зависимостей.Система не может найти указанный файл - PullRequest
6 голосов
/ 30 ноября 2011

У меня есть проект надстройки для Excel. Он отлично работает на моем компьютере. Но когда я устанавливаю его на клиентский компьютер, он выдает мне сообщение об ошибке, о котором я упоминал.

  1. Я опубликовал его, используя project-> properties-> publish.
  2. У меня установлен флажок "Включить только мой код".
  3. Я снял отметки для «брошенных» и «необработанных пользователем» для исключения «файл не найден»
  4. Я устанавливаю проект на клиенте с помощью файла «setup» в папке «publish» в папке моего проекта.
  5. При публикации-> предварительные условия у меня отмечены следующие пункты:

    .net framework sp1

    Microsoft .net Framework 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; }
    }
    

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

  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;
    }
    
  8. На клиентском компьютере установлен Excel 2010.

  9. Это строка кода, выдающая исключение:

       excelApp = (Excel.Application) 
       System.Runtime.InteropServices.Marshal.GetActiveObject
       ("Excel.Application");
    
  10. Что странно в том, что это работает, когда я выполняю следующие шаги: Запустите его на клиенте и получите исключение. Запустите его на моем собственном ПК (где исключение не происходит). Нажмите кнопку надстройки на ленте Excel, которую я сделал, в приложении на клиентском компьютере. И в этот раз я не получу никаких исключений !! Я проверял это так много раз. Каждый раз, когда я следую этому порядку, он отлично работает!

11. This is the stack trace of the exception

Заранее большое спасибо.

Edit: 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();

Ответы [ 5 ]

2 голосов
/ 14 декабря 2011

Это немного сбивает с толку, глядя только на фрагменты кода, но из названия вопроса я могу догадаться, что у вас есть проблема с динамическим созданием сборки сериализации (проблема безопасности или проблема частичного доверия). Вы можете попробовать включить «Создать сборку сериализации» в dll Addin в Off, перейдя в свойства проекта / Build и выбрав Off из списка.

0 голосов
/ 22 августа 2014

Попробуйте

project> Свойства> вкладка Build> Создать сборку сериализации> отключено

0 голосов
/ 14 декабря 2011

Я никогда не делал надстройки для Excel, но я создал несколько расширений Visual Studio, и ошибка напоминает мне в то время, когда я перепутал пути реестра для расширений.Для VS в реестре необходимо рассмотреть два пути: один для 64-битного и один для 32-битного.

Вы проверили реестр?

http://msdn.microsoft.com/de-de/library/bb386106(VS.90).aspx

0 голосов
/ 10 декабря 2011

Вы уверены, что на клиенте установлен .NET 4.0?

0 голосов
/ 30 ноября 2011

Вы включили ссылку на System.Runtime.Serialization ?

...