.Net核心类库的条件编译符号

我创建了一个.Net Core R2类库,它有一些我用于几个不同平台的常用代码。 某些代码在.Net Core平台中无效,因此我希望将其包含在条件编译符号中。 我首先搜索互联网,看看我是否能找到内置符号(如Silverlight应用程序的SILVERLIGHT和Windows 8应用程序的WINFX_CORE),但无法找到任何信息,所以我决定创建自己的符号。 这似乎也不起作用。

从我阅读的所有内容中添加和使用符号应该很简单,只需在Project Properties中为条件编译符号添加一个值即可 构建标签。 我做到了,但似乎确实有效。 这里有几个屏幕截图……

在此处输入图像描述

在此处输入图像描述

请注意,我在条件编译符号中添加了一个NET_CORE值,但是当我在代码中使用它时,代码不会被忽略。

1)是否有人知道.Net Core平台是否有内置符号(我使用的是R2)?

2)如果没有,我在创建自己的符号时做错了什么?

.xproj文件:

    14.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)    253184d7-9b42-4233-a871-8cfa3ee9e83e Linq2Db.NetCore .\obj .\bin\ v4.6.1 SAK SAK SAK SAK   2.0    

更新:我能够使用提供的答案中的链接解决此问题。 这是细节……

最初project.json文件看起来像这样……

 { "dependencies": { "NETStandard.Library": "1.5.0-rc2-24027" }, "frameworks": { "netstandard1.5": { "imports": "dnxcore50" } }, "buildOptions": { "defines": [ "NET_CORE" ] } } 

我通过改变它来解决这个问题……

 { "frameworks": { "netstandard1.5": { "imports": "dnxcore50", "dependencies": { "NETStandard.Library": "1.5.0-rc2-24027" }, "buildOptions": { "define": [ "NET_CORE" ] } } } } 

条件变量应该在RC2的project.json文件中定义,我这里有一个示例项目,

https://blog.lextudio.com/2016/06/port-snmp-from-net-core-rc1-to-rc2/

但是本文还预定了一些,

https://github.com/dotnet/core-docs/blob/master/docs/core/tutorials/libraries.md#how-to-multitarget

自从xproj停产以来,这是在新的VS 2017 csproj中完成的。

  NET_CORE  

而不是:

 private TypeInfo GetTypeInfo(Type type) { #if NETSTANDARD1_3 || NETSTANDARD1_6 //core #else //fullframework #endif } 

你可以做:

 private TypeInfo GetTypeInfo(Type type) { #if NET_CORE //core #else //fullframework #endif } 

有关多目标定位的详细信息,请参阅此处: https : //docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget

.NET Core xproj项目类型中存在一个错误。 通过项目设置定义条件编译符号时,它将元素定义为“定义”,但这是不正确的。 它应该创建一个名为“define”的元素。 您可以通过手动编辑project.json来解决此问题。

我已经在两个地方记录了这个错误。 请花点时间向微软注册您的烦恼,以便他们最终能够解决这个问题并且不会让其他人感到悲伤。

这个post详细解释了重现步骤和截图的问题: https : //github.com/dotnet/cli/issues/4022#issuecomment-238777946

这是Microsoft Connect错误报告: https : //connect.microsoft.com/VisualStudio/feedbackdetail/view/2983351/conditional-compilation-symbols-broken-in-net-core-projects#tabs