Как препроцессоры связаны с различными целевыми платформами? - PullRequest
0 голосов
/ 24 сентября 2018

Я следую наряду с докладом Иммо Ландверта , в стандартном проекте .NET я видел, как он переключается между проектами (которые обычно не являются проектами в рамках решения) из верхнего левого выпадающего списка.вниз меню, вот gif: https://image.ibb.co/mmjoHU/pre.gif

Чтобы воспроизвести то же самое, я создал библиотеку классов в .NET Framework, чтобы увидеть, что происходит, но проект не загрузился (с измененным файлом csprojтак же, как csproj демо), тогда я создал стандартную библиотеку .NET и изменил файл .csproj к этому (так же, как csproj демо ):

<Project Sdk="MSBuild.Sdk.Extras">

  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net461;uap10.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.ValueTuple" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="System.Device" />
  </ItemGroup>

</Project>

я могсм. три целевые структуры: netstandard1.4; net461; uap10.0.но на самом деле не мог понять, как они были сопоставлены с препроцессорами: NET461, WINDOWS_UWP.который работает над проектом Immo, но не работает с моей модифицированной стандартной библиотекой .NET, и три цели не отображаются.

1 Ответ

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

Похоже на условные символы компиляции со связанными файлами .cs для меня.

На вкладке Свойства> Сборка вы должны увидеть текстовое поле с надписью «Условные символы компиляции».Любые строки, которые вы помещаете в это текстовое поле, могут использоваться для условного выполнения кода с #if и #elif.Есть также символы, о которых система сборки уже знает (некоторые перечислены здесь ).

Build tab

Я предполагаю, что эти проекты также используют одни и те же файлы .cs, что объясняет # if / # elif / # else условия "flipping"в том же файле (когда вы добавляете файл в проект, выбираете добавить его как ссылку на существующий файл, тогда копия не создается).

Add as link

Я сделал это точно на нескольких проектах для разных конфигураций, и поведение соответствует .gif вы опубликовали.

...