И старый проект, который я обновил. NET 4.6.1 до 4.7.2 содержит ссылку на Microsoft.Bcl.Build
, а другой имел Microsoft.Net.Compilers
. Microsoft.Bcl.Build
очень устарел (2014), поэтому мы можем его игнорировать.
Я читал, что Microsoft.Net.Compilers
устарел в течение некоторого времени и раньше был зависимостью Microsoft.CodeDom.Providers.DotNetCompilerPlatform
. Затем Microsoft.CodeDom.Providers.DotNetCompilerPlatform
был обновлен в 2.x, чтобы больше не иметь Microsoft.Net.Compilers
в качестве зависимости.
Теперь, похоже, все изменилось, потому что Microsoft.CodeDom.Providers.DotNetCompilerPlatform
не обновлялся с 2018 года, в то время как Microsoft.Net.Compilers
был обновлен только 22 дня go с поддержкой C# 8! Страница Microsoft.Net.Compilers
(https://github.com/dotnet/roslyn/blob/master/docs/wiki/NuGet-packages.md) упоминает пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform
внизу, но на самом деле не объясняет их взаимосвязь и почему она не обновлялась годами. Странно, что у другого этот был в качестве зависимости, затем удалил его, и теперь он не поддерживается.
Другой совет: System.Net.Compilers
устарел, используйте System.Net.Compilers.ToolSet
и другие советы это «не использовать ни один», и ни один из них не предназначен для общего потребления и не будет доступен после VS 16.5: { ссылка }.
Эти пакеты, похоже, переопределяют систему сборки Так они взаимоисключающие? Я получаю сообщение об ошибке, когда оба установлены (объяснено ниже), но это не обязательно может быть вызвано взаимной исключительностью.
Дополнительная информация
При таргетинге . NET 4.7.2, при отсутствии установленного пакета на страницах MVC cs html появляется сообщение об ошибке:
В сборке определен тип 'System.Object' это не ссылка. Вы должны добавить ссылку на сборку 'netstandard, версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51'. Home ".
Установка System.Net.Compilers
НЕ решает эту проблему, хотя publi sh завершается успешно. Между тем, установка Microsoft.CodeDom.Providers.DotNetCompilerPlatform
сама по себе исправляет ошибку. Единственное, что делает последняя, это он добавляет раздел в веб-конфигурацию для system.codedom / compilers / compiler для language = "c#".
Несмотря на то, что оба устанавливаются нормально по отдельности, если у меня установлены оба пакета, publi sh операция завершается с ошибкой: «Microsoft. Net .Compilers поддерживается только в MSBuild v16.3», поэтому кажется, что Microsoft.CodeDom.Providers.DotNetCompilerPlatform
принудительно использует (или основана на?) более раннюю версию MSBuild? Атрибут ToolsVersion файла проекта равен 14 (хотя установка его на что-либо другое, похоже, не имеет никакого эффекта. Я установил его на 215, и он, например, не жаловался. Это все очень запутанно.