根据操作系统使用不同的 NuGet 包

问题描述

我已经尝试在此处遵循此线程中的所有选项:Different NuGet package based on operating system

我在 Windows 10 下使用 WSL2 和 Debian 来构建和测试我的项目。

我能够构建,无论我引用哪个包,但是当我尝试运行测试时,我一直收到错误“无法加载共享库‘db2app64.dll’或其依赖项之一。为了帮助诊断加载问题,考虑设置LD_DEBUG环境变量:libdb2app64.dll: cannot open shared object file: No such file or directory"

根据我的研究,当您使用错误版本的包时会发生此错误,例如 IBM.Data.DB2.Core,适用于 Windows,并尝试在 linux 上运行。

顺便说一句,我的项目是多目标的,我尝试了从条件到选择的所有方法

我没有使用 MSBuild 文件,而是在我的 csproj 中使用 Microsoft.SDK 项目 XML。

这是我的项目文件的一部分:

<ItemGroup Condition="'$(TargetFramework)' != 'net461'">
    <packagereference Include="Oracle.ManagedDataAccess.Core" Version="2.19.110" />
    <packagereference Include="System.Reflection.Emit" Version="4.7.0" />
    <packagereference Include="System.Data.sqlite.Core" version="1.0.113.7" />

    <!--<packagereference Include="IBM.Data.DB2.Core-lnx" Version="2.2.0.100" Condition="'$(OSTYPE)' == 'linux-gnu'" />
    <packagereference Include="IBM.Data.DB2.Core-osx" Version="2.2.0.100" Condition="'$(OSTYPE)' == 'darwin18'"/>
    <packagereference Include="IBM.Data.DB2.Core" Version="2.2.0.100"  Condition="'$(OSTYPE)' != 'linux-gnu' AND '$(OSTYPE)' != 'darwin18'" />-->
</ItemGroup>

<!--<ItemGroup Condition="'$(TargetFramework)' != 'net461' and $(IsWindows) == true ">
    <packagereference Include="IBM.Data.DB2.Core" version="2.2.0.100" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' != 'net461' and $(IsLinux) == true ">
    <packagereference Include="IBM.Data.DB2.Core-lnx" version="2.2.0.100" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' != 'net461' and $(IsOSX) == true ">
    <packagereference Include="IBM.Data.DB2.Core-osx" version="2.2.0.100" />
</ItemGroup>-->

<Choose>
    <When Condition="'$(TargetFramework)' != 'net461' and $(RuntimeIdentifier) != ''">
        <ItemGroup>
            <packagereference Condition="$(RuntimeIdentifier.StartsWith('win'))" Include="IBM.Data.DB2.Core" Version="2.2.0.100" />
            <packagereference Condition="$(RuntimeIdentifier.StartsWith('osx'))" Include="IBM.Data.DB2.Core-osx" Version="2.2.0.100" />
            <packagereference Condition="$(RuntimeIdentifier.StartsWith('linux'))" Include="IBM.Data.DB2.Core-lnx" Version="2.2.0.100" />
        </ItemGroup>
    </When>
    <When Condition="'$(TargetFramework)' != 'net461'">
        <ItemGroup>
            <packagereference Condition="$([MSBuild]::IsOSPlatform('Windows'))" Include="IBM.Data.DB2.Core" Version="2.2.0.100" />
            <packagereference Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="IBM.Data.DB2.Core-osx" Version="2.2.0.100" />
            <packagereference Condition="$([MSBuild]::IsOSPlatform('Linux'))" Include="IBM.Data.DB2.Core-lnx" Version="2.2.0.100" />
        </ItemGroup>
    </When>
    <!--<Otherwise>
        <ItemGroup>
            <packagereference Condition="$([MSBuild]::IsOSPlatform('Windows'))" Include="IBM.Data.DB2.Core" Version="2.2.0.100" />
            <packagereference Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="IBM.Data.DB2.Core-osx" Version="2.2.0.100" />
            <packagereference Condition="$([MSBuild]::IsOSPlatform('Linux'))" Include="IBM.Data.DB2.Core-lnx" Version="2.2.0.100" />
        </ItemGroup>
    </Otherwise>-->
</Choose>

注释部分是我已经测试过的选项。

有人知道吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)