仅在Linux上为ASP添加packagerreference.. NET Core 3.1 csproj:操作系统的c



我需要构建一个条件,其中一个包仅包含在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#中可用变量的官方文档,这个解决方案已经解决了我的问题。

相关内容

  • 没有找到相关文章