2

我有一个包含 3 个项目(NetCoreWebNetFrameworkWebSharedLibrary)的解决方案

  • NetCoreWeb.Net Core 2.2
  • 网络框架网络:网络框架4.5.2
  • SharedLibraryNetCoreApp 2.2 & Net Framework 4.5.2

在此处输入图像描述

这是MessageService.cs中的源代码,它位于SharedLibrary项目中:

public class MessageService
    {
        public string GetMessage()
        {
#if NETFRAMEWORK
            return "Net Framework";
#elif NETSTANDARD
            return "Net Standard";
#else
            return "Not supported";
#endif
        }
    }

每次,只有#elif NETSTANDARD中的源代码处于活动状态并可用于调试,即使我将NetFrameworkWeb设置为活动项目:

在此处输入图像描述

当我将NetFrameworkWeb设置为活动项目时,如何使#if NETFRAMEWORK块中的源代码处于活动状态,并在#elif NETSTANDARD设置为活动时将其余代码设置为活动?

谢谢,

4

1 回答 1

0

* 语句是#if编译时定义。由于您的库仅针对 .NET Standard(据我从屏幕截图和描述的行为中可以看出),因此源代码是使用NETSTANDARD常量编译的。

然后,从您的 .NET Core 和 .NET Framework 项目中使用此生成的二进制文件,因此字符串值不会更改,因为它们是从不同的项目中使用的。

如果您绝对需要为不同的运行时实现不同的行为,则需要通过将库的 csproj 文件从

<TargetFramework>netstandard2.0</TargetFramework>

<TargetFrameworks>netcoreapp2.2;net452</TargetFrameworks>

(注意 中的附加s内容TargetFrameworks

于 2019-12-04T07:05:25.803 回答