разные сторонние DLL имеют минимальные требования к различным версиям одной и той же DLL [дубликат]

Добавить почтовый заголовок в функцию почты

$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

$status = mail($to, $subject, $message, $header);

if($status)
{ 
    echo '<p>Your mail has been sent!</p>';
} else { 
    echo '<p>Something went wrong, Please try again!</p>'; 
}
18
задан Uwe Keim 1 March 2016 в 09:28
поделиться

10 ответов

Вставьте перенастройку сборки в ваше приложение / web.config;

   <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" PublicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="1.0.0.0-4.5.11.0" newVersion="4.5.11.0" />
      </dependentAssembly>

Обратите внимание, что номера версий должны соответствовать установленной вами версии.

1
ответ дан ChrisBint 22 August 2018 в 21:18
поделиться
  • 1
    Когда я помещаю этот код в свой App.Config рабочей роли, символы не загружаются, и я получаю сообщение об ошибке «Microsoft.ServiceBus.pdb не загружен». Я не уверен, почему это произойдет, когда я сделаю вышеуказанную сборку перенаправленной. Это не происходит, когда я удаляю re direct. Есть идеи? – Bitsian 24 June 2013 в 08:23
  • 2
    И мне было интересно, не нужно ли мне переходить с 4.0.8 до 4.5.11? Я вижу 4.5.11 как в старой, так и в новой версиях в коде ur? – Bitsian 24 June 2013 в 08:34

Вышеупомянутые решения верны, но есть еще один момент, который нельзя забывать: содержимое app.config было таким же, как и вышеупомянутые решения.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Но это хорошая идея проверить если он обновлен. В моем случае Newtonsoft.JSON (v.6.0.4) зависеть от другого пакета.

Есть два варианта:

  1. Обновление (пакет Newtonsoft.JSON) последних версий.
  2. Обновить файл app.config в номерах версий.

И последний совет, если вы работаете с несколькими проектами, например. exe-dll и проверить обе версии, если есть Newtonsoft.JSON.

0
ответ дан EgoistDeveloper 22 August 2018 в 21:18
поделиться

В моем случае я удалил пакет с NuGet и установил новый. Затем удалите ссылку из списка и добавьте снова вручную. Работает как шарм. Надежда решится для вас.

1
ответ дан Gerson C Filho 22 August 2018 в 21:18
поделиться

Я легко устранил эту проблему: я не скопировал файл конфигурации xml из папки компиляции.

Я просто убедился, что файл конфигурации xml также был включен вместе с моей программой, и все работало нормально !

-1
ответ дан Ippo 22 August 2018 в 21:18
поделиться

Имел эту же проблему.

Просто решил.

Это произошло после того, как NuGet был использован для установки Ext.NET, у которого есть зависимость от Newtonsoft.JSON. Уже был файл Newtonsoft.JSON.dll в / bin (и, очевидно, ссылка на него в файле web.config), без проверки. Я начал процедуру установки пакета NuGet во время отладки (так что файл, вероятно, имел блокировку).

В окне ошибки времени выполнения он расскажет вам о трассировке стека, в какой части манифеста есть проблема, у меня была основная версия, поэтому я проверил версию пакета установки. и это была 1 основная версия. Найден исходный файл NuGet: «[fизический путь] /../ packages / Newtonsoft.Json. [Версия] / lib / [. Net version] /"

Оба манифеста и библиотека были там так скопированы

Сэмплы кода: До

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

После

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>

Надеюсь, это поможет

1
ответ дан Kickass 22 August 2018 в 21:18
поделиться

Вы можете изменить конфигурацию сборки и добавить перенаправление. См. Перенаправление версий сборки в MSDN.

В основном вы хотите добавить следующий фрагмент в ваш файл app.config или web.config:

<configuration>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="Newtonsoft.Json"
                           publicKeyToken="30ad4fe6b2a6aeed"
                           culture="neutral" />
         <!-- 
           Assembly versions can be redirected in application, 
           publisher policy, or machine configuration files.
         -->
         <bindingRedirect oldVersion="1.0.0.0-4.5.11.0" newVersion="4.5.11.0"/>
       </dependentAssembly>
     </assemblyBinding>
   </runtime>
</configuration>

EDIT

Зачем вам нужно перенаправить версии сборки? Несмотря на то, что SocketIO4Net поддерживает более новые версии Newtonsoft.Json, он был скомпилирован против единственной версии (4.0.8 в вашем случае). Эта версия хранится в DLL и используется для загрузки DLL-файлов. SocketIO4Net зависит от.

Обратите внимание, что зависимости NuGet не совпадают с зависимостями DLL / времени выполнения - зависимость NuGet от Newtonsoft.Json> = 4.0.8 только означает, что вам будет разрешено установить SocektIO4Net в проект с более новой версией Newtonsoft.Json, он не имеет ничего общего с настройками времени исполнения.

Как утверждают, последние версии NuGet должны добавлять сборки, привязки-перенаправления автоматически для вас, если ваш проект имеет файл app.config или web.config.

5
ответ дан Miroslav Bajtoš 22 August 2018 в 21:18
поделиться
  • 1
    Когда я помещаю этот код в свой App.Config рабочей роли, символы не загружаются, и я получаю сообщение об ошибке «Microsoft.ServiceBus.pdb не загружен». Я не уверен, почему это произойдет, когда я сделаю вышеуказанную сборку перенаправленной. Это не происходит, когда я удаляю re direct. Есть идеи? – Bitsian 24 June 2013 в 08:24
  • 2
    И мне было интересно, не нужно ли мне переходить с 4.0.8 до 4.5.11? Я вижу 4.5.11 как в старой, так и в новой версиях в коде ur? – Bitsian 24 June 2013 в 08:37
  • 3
    @Bitsian Я не знаю, что может быть причиной «Microsoft.ServiceBus.pdb не загружен». Вероятно, еще одна ошибка, которая раньше была скрыта ошибкой привязки сборки. – Miroslav Bajtoš 24 June 2013 в 10:13
  • 4
    ОК! Что насчет 4.0.8? мне нужно упомянуть об этом в старой версии? потому что это то, что ожидает библиотека socketio4Net! – Bitsian 24 June 2013 в 10:46
  • 5
    Вы можете использовать диапазон для oldVersion. В моем примере, "1.0.0.0-4.5.11.0" означает все версии, начиная с 1.0.0.0 до 4.5.11.0 (включая 4.0.8.0). – Miroslav Bajtoš 24 June 2013 в 11:25

Просто это случилось с TeamCity, и я думаю, что другие скоро это испытают. Вероятно, это относится к большинству серверов сборки, которые вытаскивают пакеты NuGet.

Все ответы, которые говорят о необходимости перенаправления, верны. Однако вам необходимо определить правильный номер версии. Мой проект использовал Newtonsoft.Json 7.0, однако они только что выпустили 8.0, и TeamCity сбрасывал 8.0, что вызывало проблемы только на сервере, а не локально. Все мои перенаправления были установлены на 7.0.

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

0
ответ дан TyCobb 22 August 2018 в 21:18
поделиться

Недавно я работал над старым проектом. Мне нужно было обновить нашу версию Newtonsoft.Json.dll, так как мне пришлось использовать «новый» API, который требовал новой версии, но у меня все еще были другие DLL, которые требовали старую версию.

bindingRedirect вы говорите? Неа. Он продолжал жаловаться на манифестное несоответствие.

Отдельные теги CodeBase? Неа. Он продолжал жаловаться на манифестное несоответствие.

Проблема заключалась, по-видимому, в том, что у старой версии Newtonsoft.Json.dll (3.0.0.0) не есть PublicKeyToken, но «новая» версия (4.5 .7.1) У нас есть PublicKeyToken. Поэтому они не могли использовать один и тот же зависимый тег-сборщик.

Это то, что у меня получилось:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="" culture="neutral"/>
    <codeBase version="3.0.0.0" href="bin\Newtonsoft_Old\Newtonsoft.Json.dll" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <codeBase version="4.5.0.0" href="bin\Newtonsoft.Json.dll" />
</dependentAssembly>
0
ответ дан Ultroman the Tacoman 22 August 2018 в 21:18
поделиться
  • 1
    В соответствии с msdn.microsoft.com/en-us/library/7wd6ex19.aspx «Вы не можете перенаправлять версии для сборок, которые не имеют сильного имени. Общая среда выполнения языка игнорирует версию для сборок, которые не имеют сильного имени. & Quot; – PaulBinder 25 September 2017 в 17:32

Получил вышеуказанную ошибку: в Visual Studio 2013 для исправления: в пакете mamnager Execute: Install-package newtonsoft.json Это добавит новую строку в packages.config <package id="Newtonsoft.Json" version="6.0.5" targetFramework="net45" /> Удаляет предыдущую строку, которая может указывать на предыдущую версию на packages.config. Удалите каталог старой версии в каталоге packagers. Удалите ссылку NewtonSoft.Json и прочитайте ее, указав на последнюю версию. У корневого webconfig будет следующее <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />, как только все будет сделано. Закройте и откройте визуальную студию. Это должно исправить это. У меня была такая же ошибка при установке PM> install-package durandal.starterkit. Я использовал вышеупомянутый метод для исправления.

0
ответ дан Venkat 22 August 2018 в 21:18
поделиться

Найденное решение, попробуйте:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>
18
ответ дан ZeroDotNet 22 August 2018 в 21:18
поделиться
  • 1
    Это исправление для текущего пакета 6.0.8 json.net .... – Eric Brown - Cal 16 April 2015 в 17:28