Почему не определены целевые рамки .NET? - PullRequest
0 голосов
/ 14 сентября 2018

На странице документации Target Frameworks указано, что определенные определения автоматически устанавливаются на основе целевой структуры проекта, которая, как я предполагаю, изменится в зависимости от поля Target framework в Properties > Application: enter image description here

Или при выборе целевой структуры при создании нового проекта Visual C # (Новый проект> Visual C #> Консольное приложение (.NET Framework))

Однако, насколько я тестировал, ни одно из определений, указанных в документации, фактически не определено.

Например, если я создаю проект .NET Framework 3.5 или вручную устанавливаю для существующего проекта значение .NET Framework 3.5 в свойствах, NET35 не определяется.

Я взял все определения, перечисленные на странице документации, и добавил код отладки, который печатает, если они определены, или нет, но ни один из них не определен: enter image description here Исходный код: https://gist.github.com/JohannesMP/ece8987fa18b2eaf830d7426c2256d6b


Я делаю неверное предположение о том, когда или как эти определения должны быть установлены? Каким другим переносимым способом я бы условно компилировал код на основе целевой платформы для каждой строки?

Я использую Visual Studio Community 2017 версии 15.8.4 со стандартной версией Microsoft .NET Framework 4.7.03056

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

В консольном приложении не работает, но с оконным приложением, если вы удалите из ссылки: Microsoft.CSharp и System.Net.http

0 голосов
/ 15 сентября 2018

Нет.Такие предопределенные константы будут работать только в том случае, если вы работаете с новым форматом проекта SDK и с несколькими целевыми средами (например, net45 и netstandard1.3).Их существование заключается в том, чтобы помочь вам выполнить условную компиляцию, чтобы поддерживать несколько платформ. В моем блоге показан конкретный пример.

Таким образом, вы должны создать новый проект, который использует новый формат, а шаблон консольного приложения .NET Framework - нет.

...