python - 如何在 Visual Studio pyproj 项目中设置自定义构建步骤

标签 python visual-studio-2017 ptvs

我在 Visual Studio 2017 Enterprise(版本 15.4)中设置了一个 python 项目作为混合项目解决方案的一部分,该解决方案还包含各种 C#(.Net 4.6.2、.Net Core 2.0 和 Xamarin)项目。在构建过程中,我想使用一些自己编写的 C# 工具生成几个 .py 源代码文件,这也是构建的一部分。此外,.pyproj 文件中列为“编译”项的所有 .py 文件都应压缩为 .zip 文件并写入某个输出目录。

在我的 .pyprof MSBuild 文件中,我创建了两个“自定义构建步骤”目标,如下所示:

<Target Name="MyPreBuildStep" BeforeTargets="Build">
    Call self-written py-Code generator
</Target>

<Target Name="MyPostBuildStep" AfterTargets="Build" 
    Inputs="@(Compile)" 
    Outputs="$(OutputPath)\$(PythonProjectName).zip">
   <Zip ZipFileName="$(OutputPath)\$(PythonProjectName).zip" 
      WorkingDirectory="$(MSBuildProjectDirectory)\..\" Files="@(Compile)" />
</Target>

从 MSBuildCommunityTasks 导入的 Zip 任务。

如果我在 Visual Studio 中右键单击该项目并单击“重建”,一切正常。预先生成 py 代码,并将所有 @(Compile) 项放入 .zip 文件中。

不幸的是,正常的“构建”从不调用上述目标。因此,使用我当前的设置,我可以通过点击“构建”来构建包含解决方案的 40 个项目,但是 python 项目需要通过点击“重建”来获得额外邀请。很烦人。

我试图调查“Microsoft.Python.Tools.Web.targets”和“Microsoft.Python.Tools.targets”的内容。在这些文件的某个地方,一条评论说: “构建目标作为发布阶段的一部分被调用。” 嗯。

有人能告诉我如何在 .pyproj 中指定一些简单的自定义构建步骤,这些步骤只在正常的“构建”过程中起作用吗?

谢谢。

最佳答案

Build 仅在需要时调用,这是根据比较输入和输出文件的最后修改时间确定的。

大多数这些都是自动收集的,但在您的情况下,输出文件无法识别,因此不会影响是否需要构建它。 (如果您检查 Microsoft.PythonTools.targets 并找到 BuiltProjectOutputGroupSourceFilesProjectOutputGroup 目标,这些就是提供文件的目标。)

在这种情况下,您只需要将 ZIP 文件添加为输出文件,以便对其进行检查。你可以这样做:

<ItemGroup>
    <OutputFiles Include="$(OutputPath)\$(PythonProjectName).zip">
        <Visible>false</Visible>
    </OutputFiles>
</ItemGroup>

请注意,它需要在不运行构建目标的情况下可用,因此您必须能够静态计算路径,但如果此文件不存在或任何源文件比它更新,现在项目应该重建.

关于python - 如何在 Visual Studio pyproj 项目中设置自定义构建步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47061831/

相关文章:

ptvs - VS 2015 Python 环境变灰

python - Pandas:将多个变量转换为一组虚拟变量

python - 为什么不是 dir(x) 中的所有名称都对属性访问有效?

python - 理解 FeatureUnion (pandas) 工作的困惑

python - 这两种传递参数的方式有什么区别?

Typescript 调试在 Visual Studio 2017 中不起作用

visual-studio-2017 - 如何根据批量许可协议(protocol)安装 Visual Studio 2017 Enterprise?

keyboard-shortcuts - Visual Studio 2017 中的 Ctrl+Shift+Tab

python - 使用适用于 Visual Studio 的 Python 工具在 Visual Studio 中使用 Matplotlib 绘图