我正在尝试使用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 build
和dotnet publish
都无法从包中复制任何版本的Python.Runtime.dll,从而导致{{ 1}}
尝试从Visual Studio运行时会引发相同的异常。
该异常实际上是有道理的,因为我可以看到程序集未复制到输出目录。
现在的问题是,以下哪个是问题,以及如何解决它:
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
东西)如果可以解决上述问题,它是否也可以用于带有netstandard2.0
的旧式.NET Framework项目?
答案 0 :(得分:0)
如奥伦·诺沃特尼(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 /添加到软件包中。