Не удалось загрузить файл или сборку Microsoft.Build.Framework (VS 2017)

87

Когда я пытаюсь запустить команду «update-database», я получаю следующее исключение:

Укажите флаг «-Verbose» для просмотра операторов SQL, применяемых к целевой базе данных. System.IO.FileNotFoundException: не удалось загрузить файл или сборку Microsoft.Build.Framework, Version = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одну из его зависимостей. Система не может найти указанный файл. Имя файла: 'Microsoft.Build.Framework, Version = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a'

WRN: ведение журнала привязки сборки отключено. Чтобы включить ведение журнала сбоев привязки сборок, установите для параметра реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) значение 1. Примечание. С ведением журнала сбоев привязки сборок связано некоторое снижение производительности. Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Не удалось загрузить файл или сборку Microsoft.Build.Framework, Version = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одну из его зависимостей. Система не может найти указанный файл.

Алексей Вороченко
источник
1
На немецком языке это сообщение об ошибке гласит: «Die Datei oder Assembly» Microsoft.Build.Framework, Version = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a «oder eine Abhängigkeit davon wurde nicht gefunden».
Уве Кейм,

Ответы:

91

Я считаю, что у меня была такая же проблема, как и у вас. Я не сохранил все сообщение об ошибке, но мое сообщение об ошибке было

« Не удалось загрузить файл или сборку» Microsoft.Build.Framework, Version = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одна из его зависимостей. Система не может найти указанный файл. '

Я использую Visual Studio 2017 и пытаюсь сделать это Update-Databaseпосле Add-Migration.

Чтобы решить эту проблему, я закрыл Visual Studio и снова открыл ее , а затем снова запустил Update-Database.

Это может решить или не решить вашу проблему, но я подумал, что опубликую на всякий случай, если это поможет.

Восемь ворот
источник
6
Да, похоже, что "Turn-It-Off-And-On-Again" - правильный путь к разрешению в этом случае.
Даррен Остер
16
Это работает, но я не считаю это правильным ответом. Я хотел бы исправить это раз и навсегда, без перезапуска VS.
Станислав
1
Теперь это происходит каждый раз после миграции, и для работы требуется полная перезагрузка ПК.
OverMars
3
Я перепробовал все предложенные решения. Кажется, что ни один из них не решит проблему навсегда. Мне нужно постоянно перезапускать Visual Studio.
Аугусто Баррето
4
Это открытая проблема на Github здесь github.com/aspnet/EntityFramework6/issues/382
Бил Симсер
99

Наш сценарий локальной сборки использовал старую версию nuget.exe( 4.7.1.5393) для восстановления пакетов NuGet. Мы начали получать эту ошибку после обновления до версии Visual Studio 2019 16.5.0. Обновление до последней версии nuget.exe( 5.4.0.6315) устранило проблему для нас.

nuget.exeможно скачать здесь: https://www.nuget.org/downloads .

Кори Смит
источник
27
Столкнулся с этой проблемой, когда мы установили только VS2019 на сервер сборки. Чтобы исправить это в нашей сборке Azure DevOps, нужно запросить версию 5.4.0 на этапе установки инструмента NuGet.
Elder Smash
3
Обновился с 4.3.0 до 5.6 в моем TeamCity. Это устранило мою проблему. Благодарность!
Esaith
3
Это было оно. Огромное спасибо! Пошел с 4.4.1 на 5.4.0.
DaleyKD
2
@ElderSmash Мы также используем сборку Azure DevOps. В нашем случае проблема была решена путем обновления шага установщика NuGet с NuGetToolInstaller@0до NuGetToolInstaller@1, даже без указания более новой версии. Не уверен, однако, устраняет ли это основную причину проблемы или исправление - это всего лишь побочный эффект очистки локального кеша.
MarkusM
2
@ElderSmash Это была моя проблема и решение, спасибо!
Дани,
41

Основная причина этой проблемы связана с относительными путями в devenv.exe.configфайле к Microsoft.Build.Framework.dll(см. Теги xml).

Некоторые расширения Visual Studio изменяют текущий каталог и делают относительные пути недействительными.

Чтобы исправить это, откройте этот файл в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\каталоге. и заменить все ..\..\MSBuild\15.0\Bin\на C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\.

Рено Бансель
источник
Я использую Visual Studio Professioal, если я тоже буду делать то же самое. Я получаю эту ошибку несколько раз?
Shan
У меня не было папки MSBuild в среде IDE (версия сообщества), я скопировал свой MSBuild из «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community», и он ничего не исправил.
OverMars
1
Я использую 2017 Pro, и это устранило проблему. +1
Том Райт
2
Обратите внимание, что если вы обновите VS2017 после внесения этого исправления, вам, возможно, придется снова обновить devenv.exe.config
Майк Петерсон,
2
Этот ответ помог мне во второй раз - после обновления VS2017 вам нужно сделать это снова, как говорит @MikePeterson.
Джеймс Монгер
34

Я нашел обходной путь, который, похоже, решает проблему навсегда, по крайней мере, в моей среде с VS 2017 Professional 15.5.2 и Entity Framework 6.1.1.

По сути, установите DLL (с ​​несколькими связанными) в GAC (Global Assembly Cache), и проблема исчезнет.

Следуй этим шагам:

  1. Закройте все запущенные экземпляры Visual Studio 2017.

  2. Запустите командную строку разработчика Visual Studio 2017.

  3. Введите следующие команды (замените Professional на свою версию, Enterprise или Community, или измените путь соответствующим образом):

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Framework.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Engine.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Conversion.Core.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Tasks.Core.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll"
  1. Перезапустите Visual Studio 2017

По сути, GAC будет (в большинстве случаев) иметь приоритет, когда .NET пытается загрузить DLL, и исключение FileNotFoundException исчезнет, ​​поскольку ваша DLL теперь будет разрешена через GAC.

Опять же, это работает для меня, и это просто обходной путь, он не решит саму основную проблему, но, по крайней мере, мне не нужно постоянно перезапускать VS при попытке работать с миграциями EF, и этого достаточно для меня.

Г-н Lingua
источник
1
У меня тоже сработало. Командная строка разработчика Visual Studio 2017 находится в C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ Visual Studio 2017 \ Visual Studio Tools и должна запускаться от имени администратора.
David Létourneau
2
К вашему сведению - это может вызвать проблемы, когда Microsoft обновляет продукт и записи GAC становятся недействительными (более новая версия или изменение пути .. pro vs enterprise и т. Д.). В частности, проблема при обновлении до последней версии 15.8.0. Если ваши проекты не загружаются (из-за использования этого решения), см. Здесь: developercommunity.visualstudio.com/content/problem/311136/…
Барри,
11

Это сработало для меня - похоже, проблема не в поддержке, начиная с 2020 года.

На шаге Azure Build Pipeline> NuGet tool installerизмените Version of NuGet.exe to installна более новую версию, например 5.4.0. Проверяйте версии на https://dist.nuget.org/tools.json .

Проблема исчезла и теперь успешно строится.

Альфред Уоллес
источник
Обновление используемой версии nuget также помогло мне решить эту проблему.
NP83,
7

Мой отсутствующий файл или версия сборки отличается от вопроса.

У меня возникает эта ошибка, когда я пытался опубликовать свой проект ASP.net

Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

Решил проблему установкой Microsoft Build Tools 2015

Я думаю, что моя проблема вызвана тем, что я публикую проект, который был построен с VS 2015 в VS 2017. Надеюсь, что может помочь другим, у которых есть такая же проблема.

V-SHY
источник
Это помогло мне исправить CI-сборку в локальной TFS. На одном из моих серверов сборки не было этих инструментов, и он продолжал давать сбой с очень похожей проблемой.
Budhead2004
4

На всякий случай перезапуск Visual Studio не работает Зайдите в Диспетчер задач / Обозреватель процессов и скилл VBCSCompiler.exe

введите описание изображения здесь

Предложить использовать Process Explorer

битсмонки
источник
1
Я пробую это решение «На всякий случай перезапуск Visual Studio не работает. Перейдите в диспетчер задач / обозреватель процессов и скилл VBCSCompiler.exe» и все работает нормально.
Мохаммад Джихад
2

Закрытие и повторное открытие Visual Studio работает как шарм!

Масуд Дарвишян
источник
2

В моем случае что-то (возможно, NuGet-Update) действительно добавило AssemblyBinding в файл web.config:

<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>

После удаления этой зависимой Assemby-Entry я мог снова опубликовать проект.

красныйM76
источник
2

Это сработало для меня: ошибка возникает, когда я выполняю команду восстановления nuget. Nuget версии 4.6.2. У меня есть два способа решить эту проблему.

Используйте Nuget 4.8.2 и выше. gacutil / i "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Professional \ MSBuild \ Current \ Bin \ Microsoft.Build.Framework.dll

Йованни Родригес
источник
1

У нас была эта проблема, и вот что нам нужно было сделать в нашем случае:

Проблема заключалась в том, что у нас был (IDbCommandInterceptor)настроен перехватчик команд базы данных, который называется HttpRuntime.Cache["somekey"], и по какой-то причине команды миграции не выполнялись из-за этого. После удаления этой зависимости все команды работали безупречно. Может, HttpRuntimeне смогли найти dll Build Framework?

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

Эйвинд Раск
источник
Очень интересно, моя трассировка стека включала вызов метода, использующего HttpContext.Current. Удаление этого устранило проблему.
Timores
0

Я столкнулся с той же проблемой при обновлении компонентов XCode / Mono в macOS.

Решение - обновить Visual Studio для Mac до последней версии.

Я думаю, что эта проблема связана с использованием новых инструментов MSBuild из пакета .NET Core 3.0, который установлен с новой версией XCode / Mono.

пиколино
источник
0

Спасибо тем, кто уже разместил. Моя ситуация была решена комбинацией вышеуказанного. У меня было несколько версий Visual Studio: 2015, 2017, 2019. В какой-то момент версия MSBUILD перешла с 15.1 на 15.9, и я решил эту проблему, обновив C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe.configфайл, указав на библиотеку 15.9. Вот пример одной из записей:

<dependentAssembly>
      <assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
      <bindingRedirect oldVersion="2.0.0.0-99.0.0.0" newVersion="15.9.0.0"/>
      <codeBase version="15.9.0.0" href="..\..\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll" />
</dependentAssembly>
Чильберто
источник
2
ваш пример, кажется, исчез.
Jammer
0

Использование Visual Studio 2019 Community edition. Я пробовал другие решения без особого успеха, но после очистки кеша NuGet проблема, похоже, была решена. введите описание изображения здесь

JDandChips
источник