Могут ли проекты C# с целевой версией 4.7.2 работать на .net 4.6.1?

У нас есть проект C#, в котором проекты C# скомпилированы с помощью TargetFrameworkVersion 4.7.2. Например, в файле csproj это указано --

 <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>

Скомпилированный и собранный исполняемый файл устанавливается на виртуальную машину с установленным .net 4.6.1. Я вижу, что установка прошла успешно и программа работает нормально. Итак, мы можем с уверенностью сказать, что проекты, созданные с помощью 4.7.2, могут выполняться, когда установлен .netframework 4.6.1. Или здесь есть какие-то проблемы, на которые стоит обратить внимание?


person user496934    schedule 22.04.2019    source источник
comment
Мы также недавно обнаружили это при тестировании - мне интересно услышать ответ! (В нашем случае мы тестировали, что произойдет, если мы развернем приложение 4.7.2 с однократным щелчком на клиенте, на котором установлена ​​только версия 4.6.1. Мы ожидали, что оно потерпит неудачу, но на самом деле оно работало нормально...)   -  person Matthew Watson    schedule 22.04.2019
comment
Я не думаю, что это гарантированно сработает. Net использует библиотеки dll, и при изменении библиотек точки входа и списки параметров могут меняться в разных версиях. Когда Net обновляется, не все библиотеки меняются, поэтому, если вы используете библиотеки, которые не менялись, это будет работать. Многие методы Net являются просто оболочками и вызывают Windows dll, поэтому оболочки всегда будут работать с одной и той же версией Windows.   -  person jdweng    schedule 22.04.2019
comment
Я думаю, это потому, что .net framework из версии 4.0 использует одну и ту же CLR, поэтому, если вы не используете какую-то совершенно новую функцию 4.7.2 - вы можете работать на любой платформе 4.0+.   -  person vasily.sib    schedule 22.04.2019
comment
Я думаю, что это отвечает на него. Проект был построен в .net 4.6.1 пару лет назад, и только в прошлом месяце версия targetframework была обновлена ​​до 4.7.2 без каких-либо изменений кода. Поскольку мы не используем никаких новых API версии 4.7.2, все работает нормально. Группа тестирования также не обнаружила никаких проблем.   -  person user496934    schedule 22.04.2019


Ответы (1)


Вы можете использовать supportedRuntime в вашем файле app.config, например

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
</configuration>

Это возможно, так как они используют одну и ту же CLR версии 4.0. Но вы, вероятно, получите исключение во время выполнения, если используете какие-либо определенные функции из .NET 4.7.2. Подробнее см. в этой теме. Детали

person Pavel Anikhouski    schedule 22.04.2019
comment
Ага! Я только что просмотрел все наши приложения ClickOnce, и хотя настройки проекта были изменены для использования .net 4.7.2, ни один из их файлов App.Config не был обновлен, чтобы отразить это изменение! Лучше займись этим... - person Matthew Watson; 22.04.2019