2014-12-19 3 views
3

При запуске моего проекта .NET Я получаю следующее сообщение об ошибке во время выполнения:NuGet пакет GAC зависимость

Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

Из того, что я понимаю, Microsoft.WindowsAzure.ServiceRuntime является зависимость GAC и не доступна на NuGet.

Мой проект .NET ссылается на 2.5.0.0 ServiceRuntime из Azure SDK 2.5. Стектура исключения показывает, что один из наших настраиваемых пакетов NuGet ссылается на 2.4.0.0.

При взгляде на зависимости пакета 'NuGet, он не показывает ServiceRuntime, который я предполагаю, потому что это ссылка GAC (то, что NuGet не может решить):

NuGet Depedencies

я обнаружил, что добавив следующее web.config изменения, теперь он работает:

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.5.0.0" newVersion="2.5.0.0" /> 
</dependentAssembly> 

Я бы предположил, что это работает только если 2.5.0.0 обратно совместим с 2.4.0.0 спецификации.

Вопросы:

  • Что случилось бы, если бы не был обратно совместим?
  • Почему не Microsoft.WindowsAzure.ServiceRuntime пакет NuGet?

ответ

3

Хотя может быть немного поздно ответить на вопрос, тем не менее лучше поздно, чем никогда. Ниже приведено мое мнение:

Что произойдет, если оно не будет обратно совместимо?

Решение будет ломаться, хотя его маловероятно, чтобы следующая версия сборки не была обратно совместимой, вы можете запускать любую из старых .net-программ с более новыми версиями .Net/CLR, по крайней мере, она будет показывать сообщение об отставке и его только после довольно долгого времени он перестанет поддерживать не сразу, как в этом случае. Сборка - это следующая версия, только если она обратно совместима, иначе это новая сборка.

Почему не Microsoft.WindowsAzure.ServiceRuntime пакет NuGet?

Сначала выясните причину существования Nuget here, по сути, он предназначен только для сторонних библиотек/расширений. Он не предназначен для основных библиотек среды MS/.NET, исходный код которых недоступен и не может быть изменен сторонним разработчиком.

Надеюсь, это поможет в определенной степени.

+1

Nuget, безусловно, не предназначен только для сторонних библиотек. У Microsoft даже есть собственный канал в nuget - https://www.nuget.org/profiles/microsoft - в настоящее время содержится более 1100 пакетов. –

+0

MS не предоставляет основные библиотеки .Net через Nuget, библиотеки, упомянутые в ссылке, являются дополнительными библиотеками для дополнительной функциональности, которые во многих случаях имеют стороннего конкурента или могут быть переопределены для изменения текущей реализации. –

+0

В ссылка, на которую я ссылался, вы увидите довольно много библиотек, которые можно было бы считать ядром. Например, MVC, WebApi, OData, Razor, Owin и EntityFramework. Но вы наверняка правы в этом для некоторых вещей, мы, к сожалению, все еще должны установить SDK's ++ –

Смежные вопросы