【问题标题】:Source code in multiple targeting framework多目标框架中的源代码
【发布时间】:2019-12-04 03:28:56
【问题描述】:

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

  • NetCoreWeb.Net Core 2.2
  • NetFrameworkWebNet Framework 4.5.2
  • SharedLibraryNetCoreApp 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 块中的源代码处于活动状态,并在 #if NETFRAMEWORK 块中设置其余部分为活动项目strong>#elif NETSTANDARD 设置为激活状态?

谢谢,

【问题讨论】:

    标签: c# .net-core .net-standard multitargeting


    【解决方案1】:

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

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

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

    <TargetFramework>netstandard2.0</TargetFramework>
    

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

    (注意TargetFrameworks中的额外s

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2023-03-04
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多