db2 仅在Linux上为ASP.NET核心3.1 csproj添加PackageReference:操作系统的csproj条件变量列表?

eh57zj3b  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(151)

我需要构建一个条件,其中一个包只包含在Windows上,另一个包只包含在Linux上。Nuget支持Condition属性,仅在特定情况下包含PackageReference。这正是我所需要的,但示例只使用$(TargetFramework)变量检查框架版本。
我需要一个像$(OS)这样的变量,但我不知道存在哪些变量,它们的内容是什么,因此无法编写正确的条件。对于MSBuild,我找到了一个list of well-known propertiesbuild macros (but for C++)。看起来$(Platform)Win32,但我不知道它在Linux上是什么样子的:是Linux吗?发行版?Linux 32/64?
对于Windows,我尝试过

<PackageReference Include="IBM.Data.DB2.Core" Version="3.1.0.400" Condition="'$(Platform)' == 'Win32'"/>

这是不起作用的,我假设这只适用于C++代码,而不适用于C#。
我想知道,必须有一个文档的这些变量的.NET核心与可用的值,可悲的是,我找不到一个。

背景: db2

我的应用需要IBM.Data.DB2.Core*包来访问遗留应用的数据库。IBM.Data.DB2.Core包只能在Windows上运行,而IBM.Data.DB2.Core-lnx可以在Linux上运行。如果我们在Linux上使用win包,它会抛出Unable to load shared library 'db2app64.dll' error。由于这个应用应该在Win和Linux上运行,我想让它在两个平台上都能运行。

hec6srdp

hec6srdp1#

Using the process explorer, I was able to see the environment variables of 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后,我遇到了其他问题,并发现this question,它调查了OS在Linux系统上设置为UNIX,这导致我遇到第二个条件:

<PackageReference Include="IBM.Data.DB2.Core-lnx" Version="3.1.0.400" Condition="'$(OS)' == 'UNIX'"/>

然而,我仍然想知道没有找到一个关于C#中可用变量的官方文档,这个变通办法解决了我的问题。

相关问题