Я использую 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 делает в публикации, так как я могу нормально создавать и тестировать приложение на моей машине для разработки.