Вопрос

У меня есть проект, который я сделал в Visual Basic 2008 Express.Я преобразовал его из чужого проекта C #, но он работает.Он имеет несколько зависимостей от DLL.Я решил опубликовать свой проект, чтобы установить его на другой компьютер, и для каждой библиотеки DLL я получаю сообщение об ошибке:"Сборка должна быть строго подписана, чтобы ее можно было пометить как обязательное условие". Я провел некоторое исследование, но не нашел многого, и то, что я нашел, я действительно не понимаю.Что означает эта ошибка?Каков наилучший способ решить эту проблему?Еще одна вещь:мне потребовалось МНОГО времени, чтобы правильно настроить ссылки на все мои DLL-файлы, поэтому я предпочитаю, чтобы решение НЕ имело НИЧЕГО общего с перемещением DLL-файлов, потому что это, скорее всего, нарушит функциональность моего основного проекта.

Это было полезно?

Решение

Если вы публикуете через ClickOnce, перейдите на страницу публикации и нажмите "Файлы приложения".Оттуда вы должны увидеть список ваших DLL-файлов.Убедитесь, что те из них, которые доставляют вам проблемы, имеют статус публикации, отмеченный как "Включить", а не "Обязательное условие".

Это сообщение об ошибке означает, что текущие настройки публикации предполагают, что все рассматриваемые сборки будут присутствовать в глобальном кэше сборок на целевом компьютере до того, как можно будет выполнить установку.Поскольку все сборки в GAC должны быть строго подписаны, любая сборка, помеченная как обязательное условие, которая не имеет строгой подписи, выдаст вам эту ошибку.

Другие советы

Обходной путь более прост, чем это:

  1. Перейдите к своему проекту.
  2. Щелкните правой кнопкой мыши и выберите Свойства.
  3. Перейдите на вкладку Безопасность.
  4. Снимите флажок Включить настройки безопасности ClickOnce.

Если вы не развертываете это приложение через ClickOnce, вам не нужно указывать сильные имена своих сборок.

Сборки со строгими именами - это в основном сборки, подписанные криптографическим ключом.Это довольно легко сделать с помощью Visual Studio и не требует изменения порядка ваших зависимостей.

Я использую неэкспрессную Visual Studio, поэтому шаги могут немного отличаться для вас.

  • Щелкните правой кнопкой мыши на проекте и выберите свойства
  • Перейдите на вкладку Подписание
  • Установите флажок "Подписать сборку".
  • В поле со списком выберите "<New...>"
  • Завершите работу мастера
  • Перестроить

Проверьте эту ссылку out...it содержит инструкции по подписанию вашей сборки строгим именем:

MSDN:Подписание сборки Строгим именем

Чтобы создать строгое имя, просто перейдите в командную строку SDK или Visual Studio 200X, затем введите следующее

sn -k sgKey.snk

Ссылаться эта ссылка для получения подробной информации

Затем свяжите строгое имя с вашей сборкой, выполнив приведенную ниже команду

al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk

Ссылаться эта ссылка для получения подробной информации

Это просто сработало для меня после того, как вышеупомянутые решения потерпели неудачу:

Удалите ссылку на сборку по ошибке, затем добавьте ее снова.

Я обнаружил, что моя проблема заключается в файле .csproj

<Reference Include="OtherProjectNothingToDo">
  <HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>

Затем я удалил его с помощью блокнота, и теперь все в порядке.

Используя Адама Робинсона решение позволило мне опубликовать, но я обнаружил, что пользователи не могут установить проект после его публикации, поскольку система конечного пользователя жаловалась на невозможность установки, указывая на место на жестком диске.Поскольку это казалось крайне маловероятным, чтобы быть первопричиной, я изучил это подробнее.

По-видимому, причиной моей проблемы было то, что одна из моих ссылок также ссылалась на .dll, которую использовал мой проект, но другой версии.У ClickOnce этого не было, и он отказался копировать вторую версию .dll в систему пользователя, сославшись на уже существующую версию.Исправляем это так, чтобы .библиотека dll и проект ссылались на ту же версию другого .библиотека dll удалила ошибку и исправила проблему с установкой.

Убедитесь, что целевой фреймворк действительно установлен на 3.5 или любой другой фреймворк, на который вы хотите настроить таргетинг.Иногда он выдает ошибку, если он не настроен должным образом.

У меня просто тоже была эта проблема.В моем случае в моем решении была ссылка на blabla.dll, но blabla.dll также использовалась в другом.dll, на которую я ссылался в своем проекте.

При проверке версий обоих blabla.dll они не были одинаковыми.Поэтому я обновил другой.dll с правильным blabla.dll, а затем сослался на новый another.dll в моем решении.Ошибка исчезла.

Короче говоря:я использовал 2 версии blabla.dll

Я надеюсь, что это имеет смысл, если нет, дайте мне знать.:)

Проверьте мой блог для более подробного объяснения:Статья в блоге

С уважением, Джейкоб Иедема

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top