繁体   English   中英

多目标框架中的源代码

[英]Source code in multiple targeting framework

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

  • NetCoreWeb.Net 核心 2.2
  • NetFrameworkWeb网络框架 4.5.2
  • SharedLibrary : NetCoreApp 2.2 & Net Framework 4.5.2

在此处输入图片说明

这是在SharedLibrary项目中的MessageService.cs 中的源代码:

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设置为活动时将其余部分设置为活动状态?

谢谢,

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

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

如果您绝对需要为不同的运行时实现不同的行为,则需要通过更改库的 csproj 文件,将库设置为多目标项目而不是 .NET Standard 项目

<TargetFramework>netstandard2.0</TargetFramework>

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

(注意TargetFrameworks的附加s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM