4

我正在编写一个通过 Alea.Gpu 库支持 GPU 加速的库,到目前为止我的设置是:

  • 基本 .NET Standard 2.0 二进制文件 (CPU)
  • .NET Framework 4.7.1 与 Alea.Gpu (GPU)

这个想法是,您只在 .NET Core/UWP/Whatever 上使用基本 .NET Standard 2.0 库,并且在使用 .NET Framework 应用程序以利用 GPU 支持时还包括 .NET Framework 4.7.1 库。

由于 Alea.Gpu 是跨平台的(根据文档,它也可以与 Mono 和 Xamarin 一起使用),我想我会将所有代码移动到一个 .NET Standard 2.0 库中,然后用户就可以检查如果 GPU 功能在最终使用之前在当前平台上受支持。

问题是目前 Alea.Gpu NuGet 包似乎没有使用新的 PackageReference 设置,因此将其安装在 .NET Standard 2.0 库中会导致包成功添加,但在此过程中会丢失依赖项。 实际上,我安装了 Alea.Gpu,但库中没有任何命名空间(.dll 文件也不存在)。

见这里:https ://github.com/dotnet/standard/issues/481

我找到了一种似乎可行的解决方法,即使仅在 .NET Framework 上,也只需将这些行添加到库 .csproj 文件中:

<ItemGroup>
    <Reference Include="Alea">
        <HintPath>$(NuGetPackageRoot)\alea\3.0.4\lib\net45\alea.dll</HintPath>
    </Reference>
    <!-- Same for Alea.Parallel -->
</ItemGroup>

我的问题是:

  • 即使 .dll 文件没有正确添加到库中,它们是否仍会在构建时被下载,因此它们仍会像 .csproj 代码一样在任何其他 PC 上的该文件夹中结束?
  • 是否可以肯定地说,无论实际平台如何,VS 在构建时都会将这些 .dll 文件恢复到同一个 net45 子文件夹中?我的意思是,在恢复 .NET Standard 2.0 库的包时,它会自动回退到 net45 吗?
  • 在更新 Alea.Gpu 以使用 PackageReference 以便它自动包含这些 .dll 文件之前,还有其他(更好的)解决方法吗?

谢谢!

4

0 回答 0