Ing*_*ein 8 msbuild msbuild-task visual-studio incremental-build
我有一个 C# 库项目,它具有一些使用 PowerShell 在“BeforeBuild”中创建的依赖项。
MSBuild 似乎每次都会执行目标“BeforeBuild”,即使库项目本身不需要构建也是如此。
我想将构建过程配置为仅在库需要(重新)构建时运行 PowerShell 脚本。
有没有办法做到这一点?
我尝试使用目标“BeforeBuild”和“BeforeCompile”。但似乎每次都会执行。
MSBuild 似乎每次都执行目标“BeforeBuild”,也好像库项目本身不需要构建。
如果库项目本身不需要构建,那么 msbuild 每次都执行目标是什么意思?据我所知,BeforeBuild是构建过程中必需的一个目标,因此如果你构建一个项目,它总是会调用该目标。如果库项目不需要构建,那么调用 msbuild 来构建它的原因是什么?更多细节可能会更好:)
我想将构建过程配置为仅在库需要(重新)构建时运行 PowerShell 脚本。
有没有办法做到这一点?
我尝试使用目标“BeforeBuild”和“BeforeCompile”。但似乎每次都会执行。
BeforeBuild是BeforeCompilemsbuild 系统中预定义的目标。您可以覆盖它们以自定义构建步骤,但您无法避免在构建过程中运行它们。因此,每次构建开始时,它们都会执行,这是设计的预期行为。
根据您的描述,您可以覆盖这些目标并在其中运行power shell脚本。这就是为什么在你的机器上它总是调用 ps 脚本。
如果您通过 msbuild.exe 而不是 VS IDE 构建项目,这里有一个解决方法:
假设您已覆盖BeforeTarget项目文件。您可以添加条件来确定是否运行自定义 BeforeTarget(调用 ps 脚本)或原始 BeforeTarget.
定义一个名为 的属性RunPS,并向您使用的 BeforeTarget 添加一个条件,如下所示:
<PropertyGroup>
<RunPS>false</RunPS>
</PropertyGroup>
<Target Name="BeforeBuild" Condition="$(RunPS)=='true'">
<!--Run the ps script here-->
</Target>
Run Code Online (Sandbox Code Playgroud)
然后您可以通过设置 的值来控制是使用默认的 BeforeTarget 还是自定义的RunPS。
msbuild xx.csproj /p:RunPS=true在构建过程中运行 ps 脚本,msbuild xx.csproj运行原始脚本BeforeTarget
如果您在 VS IDE 中构建项目,则可以创建从 Debug 或 Release 复制的新配置(CustomDebug),并设置Condition="$(Configuration)=='CustomDebug'"为目标。
更新:
对于在 VS 和命令行中有效的解决方法:
请参阅此文档,在 VS 中我们可以通过复制调试和发布配置中的设置来轻松创建新配置。
1.我认为,对于你的库项目,你有正常的Debug和Release配置,你可以按照文档中的提示创建相应的自定义配置。从 Debug 复制设置并创建名为 PSDebug 的新配置,从 Release 复制设置并创建名为 PSRelease 的新配置。
2.然后编辑xx.csproj,添加以下格式的条件:
<Target Name="BeforeBuild" Condition="'$(Configuration)'=='PSDebug' OR '$(Configuration)'=='PSRelease'">
<!--Run the ps script here-->
<Message Text="showsth" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)
然后在 VS IDE 中,如果您使用普通 Configuration 构建Debug or Release,它将使用默认BeforeBuild目标。并且只有当你使用 custom 构建时PSDebug or PSRelease,它才会调用你的自定义BeforeBuild目标。在 VS 中,你可以通过这个框轻松地在这些配置之间切换:
对于命令行来说,它也有效。如果您使用类似命令msbuild xx.csproj /p:Configuration=Debug,它将使用预定义的 BeforeBuild 目标来执行此操作,如果您使用类似命令msbuild xx.csproj /p:Configuration=PSDebug,它将调用您的自定义目标并运行 PS 脚本。
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |