如何在 net472 上正确打包和使用具有多个运行时的 .NET Standard 库?
How to properly package and consume .NET Standard library with multiple runtimes on net472?
我正在尝试为 Python.NET 制作一个多平台包,目标是 .NET Standard 2.0,使用 this project。
我设法创建了一个具有以下结构的 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 build
和 dotnet publish
都无法从中复制任何版本的 Python.Runtime.dll包,导致 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.
尝试从 Visual Studio 到 运行 时引发相同的异常。
异常实际上是有道理的,因为我可以看到程序集没有复制到输出目录。
现在的问题是以下哪项是问题所在,我该如何解决:
- 我的 .nuget 包缺少一些东西,所以没有为
net472
目标选择任何东西(尽管我希望它只是使用 netstandard2.0
东西)
- 我的测试应用程序 .csproj 缺少一些东西(也许我需要在 .csproj 中指定所有支持的 运行 次?)
- 工具根本不支持这样的设置
如果有解决上述问题的方法,它是否也适用于使用 packages.config
的旧式 .NET Framework 项目?
正如 Oren Novotny 在 https://github.com/dotnet/cli/issues/10806 中所建议的,有两点很重要。
将 dotnet run
或 dotnet publish
与 net4xx
目标一起使用时,在这种情况下,必须指定 --runtime
。
对于 dotnet publish
,通用的似乎没问题:dotnet run -r win
。
对于 dotnet run
我必须指定一个具体的:dotnet run -r win7-x64
。
为了避免这种情况,除了当前内容(尚未尝试)之外,我还必须将 lib/net4XX/ 添加到包中。
我正在尝试为 Python.NET 制作一个多平台包,目标是 .NET Standard 2.0,使用 this project。
我设法创建了一个具有以下结构的 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 build
和 dotnet publish
都无法从中复制任何版本的 Python.Runtime.dll包,导致 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.
尝试从 Visual Studio 到 运行 时引发相同的异常。
异常实际上是有道理的,因为我可以看到程序集没有复制到输出目录。
现在的问题是以下哪项是问题所在,我该如何解决:
- 我的 .nuget 包缺少一些东西,所以没有为
net472
目标选择任何东西(尽管我希望它只是使用netstandard2.0
东西) - 我的测试应用程序 .csproj 缺少一些东西(也许我需要在 .csproj 中指定所有支持的 运行 次?)
- 工具根本不支持这样的设置
如果有解决上述问题的方法,它是否也适用于使用 packages.config
的旧式 .NET Framework 项目?
正如 Oren Novotny 在 https://github.com/dotnet/cli/issues/10806 中所建议的,有两点很重要。
将 dotnet run
或 dotnet publish
与 net4xx
目标一起使用时,在这种情况下,必须指定 --runtime
。
对于 dotnet publish
,通用的似乎没问题:dotnet run -r win
。
对于 dotnet run
我必须指定一个具体的:dotnet run -r win7-x64
。
为了避免这种情况,除了当前内容(尚未尝试)之外,我还必须将 lib/net4XX/ 添加到包中。