Надеюсь, кто-нибудь может объяснить, где я ошибся здесь.
У нас есть несколько общих сборок, созданных с VS 2015, которые уже использовали определенные лингвистические функции C # 6 (интерполяция строк, нулевые условные операторы и т. Д.). Нам не нужно было добавлять к этим проектам ссылку на Nuget в Roslyn Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider; Visual Studio / msbuild только что обработал это для нас.
Недавно я работал над проектом веб-сайта ASP.Net, который мы поставляем предварительно скомпилированным и создаем с помощью msbuild. Мне пришлось обновить целевую среду в этом решении, чтобы мы могли использовать эти общие сборки, но я все еще не мог использовать возможности языка C # 6 в коде позади.
Я нашел сообщения о том, что компиляторы больше не являются частью основного .net и больше не находятся в gac, и что для использования их с решениями для веб-сайтов asp.net и кодами вам пришлось: а) изменить веб .config для ссылки на новые компиляторы и б) добавить в решение ссылки на nuget для этих компиляторов.
Мое рассуждение было таким: другие общие сборки не должны были добавлять компиляторы Roslyn в качестве пакетов nuget для использования этих функций, и мы предварительно компилировали все решение для продукта сборки и не поставляли никакой компиляции. оперативный код позади, поэтому мы не хотели / не нуждались в сборках компилятора Roslyn в продукте сборки (нам не нужно было это делать для других наших сборок WebApi и других приложений; msbuild / VS 2015 просто позаботилась об этом - кроме строковых интерполяций и нулевых условных операторов есть синтаксический сахар, который, кажется, не имеет дополнительных требований времени выполнения).
Поэтому я попытался просто обновить раздел web.config для ссылки на компиляторы Roslyn. На моем компьютере разработчика я нажал Build в VS, и он работал нормально. Я запускал msbuild на своей системе локально, и он работал нормально.
Но это было только потому, что Visual Studio неявно добавила компиляторы Roslyn в качестве ссылки на nuget. Они отображаются в каталоге пакетов и в каталоге выходного бина.
На сервере сборки, только что запущенном msbuild, происходит сбой, поскольку компиляторы Roslyn не были извлечены и помещены в папку пакетов.
Есть ли какой-нибудь способ для предварительно скомпилированного решения для веб-сайта использовать лингвистический сахар C # 6.0, не добавляя Roslyn в качестве пакета nuget, как другие совместно используемые сборки?
Спасибо