Nano Hash - криптовалюты, майнинг, программирование

Как добавить ссылочную сборку в развертывание проекта VSTO?

Я написал несколько надстроек Excel 2003/2007, используя VSTO, и обычно в итоге я ссылаюсь на .NET dll в проекте VSTO (обычно код, который я повторно использую в проектах).
Я столкнулся со следующей проблемой. В то время как вызовы dll отлично работают в режиме отладки или на машине разработки, когда я развертываю надстройку через установщик msi, dll добавляется в папку надстройки, но надстройка не Кажется, я могу вызывать dll.
После некоторых усилий я нашел способ обойти это: поверх пользовательского действия в установщике, предоставляющего безопасность надстройке, я добавляю еще одно пользовательское действие, предоставляющее безопасность каждому отдельной dll, на которую ссылается надстройка, следуя шагам, описанным в
http://msdn.microsoft.com/en-us/library/bb332052.aspx

Моя проблема в том, что, хотя это работает, я не уверен, что делаю это правильно. Это очень утомительно, и я также получаю предупреждение при сборке, которое из того, что я могу сделать, на самом деле указывает на тот факт, что безопасность предоставляется дважды в одном и том же месте.
Любой здесь может сказать мне, действительно ли я делать это правильно или нет, и какой лучший способ, если он есть?

17.08.2009

Ответы:


1

В моем случае у меня есть набор надстроек в MyCompany.Office.

У меня есть общая библиотека основных функций под названием MyCompany.Office.dll, на которую ссылаются MyCompany.Office.Word.dll и MyCompany.Office.Excel.dll, которые являются надстройками (у вас может быть несколько надстроек для Excel, а не один для Word и один для Excel или что угодно).

Что я сделал, так это создал ключевой файл со строгим именем для решения и связал его во всех трех проектах. Затем я подписал все три библиотеки одним и тем же ключевым файлом со строгим именем.

Затем я создал действие установщика, которое добавляет запись CAS, используя в качестве доказательства открытый ключ, а не местоположение файла. поэтому мое пользовательское действие в конечном итоге вызывает caspol.exe -m -q -ag "My_Computer_Zone" -strong -hex <my public key> -noname -noversion FullTrust -n "MyCompany_Office" -d "Code group for MyCompany.Office add-ins.". Это дает FullTrust всем библиотекам с этим открытым ключом.

Вы можете просмотреть открытый ключ, открыв командную строку, перейдя к расположению ключевого файла и введя sn -Tp mykeyfile.snk. Если вы хотите получить открытый ключ программно (например, расширение SetSecurity), вы можете использовать такой код:

private static String GetPublicKeyHexString(String assemblyPath)
{
    AssemblyName assmName = Assembly.LoadFile(assemblyPath).GetName();
    StringBuilder output = new StringBuilder();
    Byte[] publicKey = assmName.GetPublicKey();

    foreach(Byte byte in publicKey) 
    {
       output.Append(byte.ToString("x").PadLeft(2, '0'));
    }

    return output.ToString();
}
09.10.2009
  • Мне нужно попробовать это, прежде чем пометить это как правильный ответ, но это выглядит разумно. 09.10.2009
  • Вы также можете использовать URL-адрес в качестве доказательства и указать URL-адрес вашего каталога установки. Тем самым давая всем сборкам в этой папке FullTrust. Я не рекомендую это все же. Кто-то может поместить вредоносную сборку в вашу папку установки, полностью доверяя ей, а затем обвинить вас в создании уязвимости. Я упоминаю об этом только на случай, если кто-то предложит это, чтобы вы могли понять, почему это не очень хорошая идея. 09.10.2009
  • Спасибо, я верю, что это работает. На самом деле я нашел этот пост на форуме msdn, который предлагает небольшую модификацию проекта SetSecurity, позволяющую добавить список dll, разделенных запятыми, вместо одной dll (сообщение Lex007 в ветке). Таким образом, вам не нужно использовать один и тот же ключ. social.msdn.microsoft .com/forums/en-US/vsto/thread/ 13.10.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..