我跟随a talk by Immo Landwerth,在一个.NET标准项目中,我看到他从左上方的下拉菜单中在项目(通常不是解决方案下的项目)之间切换,这是一个gif:https://image.ibb.co/mmjoHU/pre.gif
要重现相同的内容,我在.NET Framework中创建了一个类库以查看运行情况,但是项目加载失败(修改后的csproj文件与演示文稿的csproj相同),然后我创建了一个.NET标准库,并将.csproj文件修改为此(与the demo's 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标准库一起使用,并且三个目标都没有出现。
答案 0 :(得分:0)
在我看来,带有链接的.cs文件的条件编译符号。
在“属性”>“构建”选项卡中,您应该看到一个标记为“条件编译符号”的文本框。您在此文本框中输入的任何字符串都可以用于有条件地使用#if
和#elif
执行代码。还有一些构建系统已经知道的符号(在here中列出了一些符号)。
我假设这些项目还共享相同的.cs文件,这说明了#if /#elif /#else条件在同一文件内“翻转”(将文件添加到项目时,选择将其添加为链接到现有文件,则不会创建副本)。
我已经在多个项目中针对不同的配置执行了此操作,并且行为与您发布的.gif匹配。