如何将python NuGet包的二进制文件复制到项目构建输出目录?
如何修改.csproj将Python NuGet包的二进制文件复制到构建目录
你需要在现有.csproj中添加自定义MSBuild目标,利用NuGet包自带的GetPythonRuntimeFiles目标收集需要的文件,再将它们复制到项目输出目录。以下是修改后的完整.csproj内容:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <Nullable>enable</Nullable> <Platforms>x64</Platforms> <!-- 可选:调整Python文件包含规则,对应包内props的配置 --> <IncludePythonExe>true</IncludePythonExe> <IncludeDistutils>false</IncludeDistutils> <IncludeLib2To3>false</IncludeLib2To3> <IncludeVEnv>false</IncludeVEnv> </PropertyGroup> <ItemGroup> <PackageReference Include="python" Version="3.11.2" /> </ItemGroup> <!-- 自定义目标:收集并复制Python运行时文件到输出目录 --> <Target Name="CopyPythonRuntimeFiles" AfterTargets="Build" DependsOnTargets="GetPythonRuntimeFiles"> <Copy SourceFiles="@(PythonRuntime)" DestinationFiles="$(OutputPath)%(Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" /> </Target> <!-- 可选:清理时删除复制的Python文件 --> <Target Name="CleanPythonRuntimeFiles" AfterTargets="Clean"> <Delete Files="$(OutputPath)%(PythonRuntime.Link)" /> </Target> </Project>
修改说明:
- 属性配置(可选):在
<PropertyGroup>中添加的IncludePythonExe等属性,用于控制是否包含Python可执行文件、distutils模块等,对应NuGet包内python.props的默认配置,可根据需求调整。 - 复制目标:
CopyPythonRuntimeFiles目标依赖包自带的GetPythonRuntimeFiles,该目标会自动收集符合规则的Python运行时文件(DLL、EXE、Lib文件等)。通过Copy任务将这些文件按原有目录结构复制到$(OutputPath)(项目输出目录)。 - 清理目标(可选):
CleanPythonRuntimeFiles目标会在执行清理操作时,删除输出目录中复制的Python文件,保持输出目录干净。
内容的提问来源于stack exchange,提问作者Matt Thomas
相关产品推荐
相关产品推荐

