Веб-публикация не может найти Microsoft.Build.Framework - PullRequest
0 голосов
/ 05 октября 2018

Я использую VS2017 с проектом ASP.NET, унаследованным от другого разработчика.У меня есть функция публикации, настроенная для публикации в папке.До сих пор все это прекрасно работало.

Предыдущий разработчик использовал EntityFramework, хотя все ссылки были разбиты, когда я получил проект, поэтому мне пришлось собрать воедино какую версию.Я использую 6.2.0 в настоящее время, и все работает отлично.Он, очевидно, использовал функцию автоматической миграции.Я продолжал использовать это, но у меня была пара ситуаций, когда мне приходилось включать потерю данных.Я действительно не хочу этого делать, поэтому предлагаемый путь - включить миграции и добавить фактические миграции.Я не новичок в OR Mappers, но я новичок в EF, поэтому миграции для меня довольно новы.На самом деле, это была тяжелая битва, чтобы заставить вещи работать так, как говорят доктора, (см. эту ветку )

Итак, теперь я дошел до того, чтомои начальные данные миграции.Казалось, что следующим шагом является его передача на наш сервер разработки, а затем на наш производственный сервер.Итак, поскольку я много раз использовал функцию публикации в этом проекте, я подумал, что он просто сработает.Ну, сейчас это не так из-за изменений, которые я сделал, чтобы заставить работать миграции EF.

Публикация продолжается до тех пор, пока это не будет сделано:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p 
C:\Users\Dan\Documents\Source\Repos\web- 
app\WebApp\obj\Release\AspnetCompileMerge\Source -u 
C:\Users\Dan\Documents\Source\Repos\web- 
app\WebApp\obj\Release\AspnetCompileMerge\TempBuildDir 

/global.asax(1,0): Error ASPPARSE: Could not load file or assembly 
'Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified.

ASPNETCOMPILER(0,0): Error ASPRUNTIME: Could not load file or assembly 
'Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified.

Первое, что показалось мне интереснымзаключается в том, что для того, чтобы миграция работала, мне пришлось установить Microsoft.Build.Framework 15 (в частности, я установил 15.1.1012 с помощью nuget, а затем попытался обновить его до последней версии, которая теперь является 15.8.166).Это было больше чем совпадение, что это другая версия той же библиотеки, в которой есть ошибки.

Я видел упоминание о необходимости отредактировать файл devenv.exe.config, чтобы изменить относительные пути на абсолютные ( здесь ), но это не помогло.

Я подтвердил в GAC, что 4.0.0.0 существует.По-видимому, так же и 14.0.0.0.Насколько я понимаю, установленные версии, которые меньше 15, должны быть в GAC.

Я убедился, что Microsoft.Build.Framework был добавлен (через nuget) как в мой проект веб-приложения, так и в проект, которыйимеет контекст EF и миграции.Версия 15 Microsoft.Build.Framework была указана в обоих проектах как справочная и автоматически была установлена ​​на «Копировать локально».

Я попытался изменить версию, указанную в моем веб-приложении, на 4.0.0.0, в которой изначально было «Копировать».Локальное значение false.Не помоглоИзменена ссылка 4.0.0.0 на Copy Local.На этот раз я столкнулся с единственной ошибкой:

Could not load file or assembly 'Microsoft.Build.Framework, 
Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one 
of its dependencies. The located assembly's manifest definition does not 
match the assembly reference. (Exception from HRESULT: 0x80131040)

Теперь, моя мысль была такова, что похоже, что задействованы несколько версий, возможно, об этом следует позаботиться с помощью перенаправления привязки.Мне редко приходится иметь дело с перенаправлениями привязки, поэтому я не очень опытный специалист, но я посмотрел на web.config, и кажется, что что-то (я предполагаю, что установка Nuget из Microsoft.Build.Framework 15) уже вошлоследующее:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
  </dependentAssembly>

Итак, учитывая, что 4.0.0.0 находится в GAC, и учитывая, что существует перенаправление, которое, я считаю, перенаправит любую ссылку 4.0.0.0 на 15.1.0.0, почему я получаю ошибки об этом?быть в состоянии найти 4.0.0.0?Я что-то упускаю?Я предполагаю, что это должно быть связано с чем-то, что aspnet_compiler.exe делает в публикации, так как я могу нормально создавать и тестировать приложение на моей машине для разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...