我需要构建一个条件,其中一个包仅包含在Windows上,另一个包仅包含在Linux上。Nuget支持Condition
属性,仅在特定情况下包含PackageReference
。这正是我所需要的,但示例只检查框架版本与$(TargetFramework)
变量。
我需要像$(OS)
这样的变量,但我不知道存在哪些变量以及它们的内容是什么来编写正确的条件。对于MSBuild,我找到了一个众所周知的属性和构建宏的列表(但对于c++)。似乎$(Platform)
是Win32
,但我不知道它在Linux上的样子:它是Linux吗?分布?Linux32/64吗?
对于Windows,我试过
<PackageReference Include="IBM.Data.DB2.Core" Version="3.1.0.400" Condition="'$(Platform)' == 'Win32'"/>
不工作,我认为这只适用于c++代码,而不是c#。
我想知道,必须有这些变量的文档与可用的值。net Core,遗憾的是,我找不到一个。
背景:DB2
我的应用程序需要IBM.Data.DB2.Core*
包访问遗留应用程序的数据库。IBM.Data.DB2。Core包仅适用于Windows,其中IBM.Data.DB2。Core-lnx在Linux上工作。如果我们在linux上使用win包,它会抛出一个无法加载共享库'db2app64.dll'错误。因为这个应用程序应该在Win和Linux上运行,我想让它为这两个平台做好准备。
使用进程资源管理器,我可以看到Visual Studio的环境变量。这些变量在csproj文件中作为$(VARNAME)
可用。它包含一个变量OS
,在Windows 10上设置为Windows_NT
,所以我可以为Windows创建一个条件:
<PackageReference Include="IBM.Data.DB2.Core" Version="3.1.0.400" Condition="'$(OS)' == 'WINDOWS_NT'"/>
在我想从我的Docker基础映像更改为Alpine之后,我遇到了其他问题,并发现了这个问题,该问题调查了OS
在Linux系统上设置为UNIX
,这导致了我的第二个条件:
<PackageReference Include="IBM.Data.DB2.Core-lnx" Version="3.1.0.400" Condition="'$(OS)' == 'UNIX'"/>
然而,我仍然想知道没有找到关于c#中可用变量的官方文档,这个解决方案已经解决了我的问题。