Укажите версию платформы для CSharpCompilation.Emit
Кто-нибудь знает, можно ли указать Framework-Version при генерации сборок с использованием метода расширения Eh в CSharpCompilation?
Нам нужно нацелиться на 4.5.1, так как в противном случае мы получим неприятную ошибку времени выполнения:
MissingMethodException
Method not found: '!!0[] System.Array.Empty()'.
Или нам нужно подождать, пока клиенты обновятся до Framework 4.6, прежде чем мы сможем использовать Roslyn?
1 ответ
Компилятор не имел (и никогда не имел) понятия "каркасная версия". Все, что понимает компилятор, - это набор ссылок. Похоже, что вы создаете свою компиляцию со ссылками на версии 4.6 платформы (возможно, потому что вы используете рабочие места сборки и работаете на 4.6).
Вместо этого вам нужно убедиться, что у вас установлен пакет таргетинга 4.5.1 (установка VS делает это автоматически, но на других машинах его может не быть), и добавить ссылки на вашу компиляцию из C:\Program Files (x86)\Reference Assemblies
,
Компилятор будет выдавать ссылки на Array.Empty
если он существует в ссылочных сборках, но имеет запасную логику, если его нет.