我创建了一个小应用程序,它针对两个框架(.net core 2.2和.net core 3.0),并使用目标框架符号(NETCOREAPP2_2和NETCOREAPP3_0)。
项目文件非常简单,如下所示:
程序代码可能不够简单:
如果我使用常规的
在我的情况下,我需要使用额外的编译符号
项目文件非常简单,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp3.0;netcoreapp2.2</TargetFrameworks>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
程序代码可能不够简单:
public class MyClass
{
static void Main()
{
#if NETCOREAPP3_0
System.Console.WriteLine("Target framework: NETCOREAPP3_0");
#elif NETCOREAPP2_2
System.Console.WriteLine("Target framework: NETCOREAPP2_2");
#else
System.Console.WriteLine("Target framework: WHO KNOWS?!");
#endif
#if TEST_RUN
System.Console.WriteLine("Test mode active!");
#endif
}
}
如果我使用常规的
dotnet build --no-incremental
命令构建它而没有其他参数,那么创建的两个版本都能正常工作。PS>> dotnet .\bin\Debug\netcoreapp2.2\TargetFramework.dll
Target framework: NETCOREAPP2_2
PS>> dotnet .\bin\Debug\netcoreapp3.0\TargetFramework.dll
Target framework: NETCOREAPP3_0
在我的情况下,我需要使用额外的编译符号
TEST_RUN
来构建两个版本。 因此,我将附加参数添加到我的构建命令dotnet build --no-incremental -p:DefineConstants=TEST_RUN
中。 结果是我拥有一个没有目标框架概念的应用程序。PS>> dotnet .\bin\Debug\netcoreapp2.2\TargetFramework.dll
Target framework: WHO KNOWS?!
Test mode active!
PS>> dotnet .\bin\Debug\netcoreapp3.0\TargetFramework.dll
Target framework: WHO KNOWS?!
Test mode active!
我需要保留目标框架的预处理器符号,但是我不知道该如何实现。有什么建议吗?