我有一个包含3个项目的解决方案( NetCoreWeb , NetFrameworkWeb , SharedLibrary )
这是 SharedLibrary 项目中的 MessageService.cs 中的源代码:
public class MessageService
{
public string GetMessage()
{
#if NETFRAMEWORK
return "Net Framework";
#elif NETSTANDARD
return "Net Standard";
#else
return "Not supported";
#endif
}
}
每次,即使我将 NetFrameworkWeb 设置为活动项目,也只有 #elif NETSTANDARD 中的源代码处于活动状态并且可用于调试。
在将 NetFrameworkWeb 设置为活动项目时,如何使 #if NETFRAMEWORK 块中的源代码处于活动状态,而在< strong> #elif NETSTANDARD 设置为活动状态?
谢谢
答案 0 :(得分:0)
#if
*语句是编译时定义。由于您的库仅针对.NET Standard(据我从屏幕快照和描述的行为所知),因此源代码是使用NETSTANDARD
常量编译的。
然后,在您的.NET Core和.NET Framework项目中使用此结果二进制文件,因此字符串值不会更改,因为它们是在其他项目中使用的。
如果您绝对需要针对不同的运行时实现不同的行为,则需要通过将库的csproj文件从以下位置更改,将库设置为多目标项目而不是.NET Standard项目。
<TargetFramework>netstandard2.0</TargetFramework>
到
<TargetFrameworks>netcoreapp2.2;net452</TargetFrameworks>
(请注意s
中的附加TargetFrameworks
)