В чем разница между Microsoft.CodeDom.Providers.DotNetCompilerPlatform и Microsoft. Net .Compilers? - PullRequest
0 голосов
/ 12 марта 2020

И старый проект, который я обновил. 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, и он, например, не жаловался. Это все очень запутанно.

...