如何正确打包和使用Net472上具有多个运行时的.NET标准库?

时间:2019-02-12 06:43:10

标签: .net .net-core nuget .net-standard-2.0 .net-4.7.2

我正在尝试使用this project为Python.NET创建一个针对.NET Standard 2.0的多平台软件包。

我设法创建了一个具有以下结构的NuGet包:

ref
|- netstandard2.0
 |- Python.Runtime.dll
runtimes
|- win
 |- lib
  |- netstandard2.0
   |- Python.Runtime.dll
|- linux-x64
 |- ...

基于新的.csproj格式+ PackageReferece,但仅当我定位netcoreappX.X时,此软件包才能与测试应用完美配合。在这种情况下,它将整个runtimes文件夹复制到dotnet publish上的输出,并且可以正常运行。

如果我将TargetFramework更改为net472,则Windows上的dotnet builddotnet publish都无法从包中复制任何版本的Python.Runtime.dll,从而导致{{ 1}}

尝试从Visual Studio运行时会引发相同的异常。

该异常实际上是有道理的,因为我可以看到程序集未复制到输出目录。

现在的问题是,以下哪个是问题,以及如何解决它:

  1. 我的.nuget软件包缺少内容,因此FileNotFoundException: Could not load file or assembly 'Python.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.目标没有得到任何帮助(尽管我希望仅使用net472东西)
  2. 我的测试应用程序.csproj缺少某些内容(也许我需要在.csproj中指定所有受支持的运行时?)
  3. 工具完全不支持这种设置

如果可以解决上述问题,它是否也可以用于带有netstandard2.0的旧式.NET Framework项目?

1 个答案:

答案 0 :(得分:0)

如奥伦·诺沃特尼(Oren Novotny)在https://github.com/dotnet/cli/issues/10806中所建议的,有两件重要的事情。

dotnet rundotnet publishnet4xx目标一起使用时,在这种情况下,必须指定--runtime

对于dotnet publish,使用通用名称似乎不错:dotnet run -r win

对于dotnet run,我必须指定一个具体的值:dotnet run -r win7-x64

为避免这种情况,除了其当前内容(尚未尝试)外,我还必须将lib / net4XX /添加到软件包中。