如何将构建后事件限制为仅为一种类型的构建运行?
我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。
如何将构建后事件限制为仅为一种类型的构建运行?
我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。
当前回答
您可以将配置名称传递给构建后脚本,并在那里检查它是否应该运行。
用$(ConfigurationName)传递配置名。
检查它取决于您如何实现构建后步骤——它将是一个命令行参数。
其他回答
您可以将配置名称传递给构建后脚本,并在那里检查它是否应该运行。
用$(ConfigurationName)传递配置名。
检查它取决于您如何实现构建后步骤——它将是一个命令行参数。
与任何项目设置一样,构建事件可以在每个Configuration中配置。只需在“属性页”对话框的下拉菜单中选择您想要更改的配置,并编辑后构建步骤。
截至2022年,我已经找到了两个解决方案。在我的特定情况下,我想打包到不同的目录,这取决于Configuration。
选项1
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="if $(Configuration) == Debug (dotnet pack --no-build -o ~/../../../../../nuget-repo/debug -p:PackageVersion=$(VersionInfo)) else (dotnet pack --no-build -o ~/../../../../../nuget-repo -p:PackageVersion=$(VersionInfo))" />
</Target>
选项2
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Condition="'$(Configuration)' == 'Debug'" Command="dotnet pack --no-build -o ~/../../../../../nuget-repo/debug -p:PackageVersion=$(VersionInfo)" />
<Exec Condition="'$(Configuration)' == 'Release'" Command="dotnet pack --no-build -o ~/../../../../../nuget-repo -p:PackageVersion=$(VersionInfo)" />
</Target>
我更喜欢第二种选择。
Visual Studio 2015:正确的语法是(保持在一行上):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
这里没有255错误。
或者(因为事件被放入一个批处理文件中,然后被调用),使用以下(在构建事件框中,而不是在批处理文件中):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
通过这种方式,您可以拥有任何配置的事件,并且仍然使用宏来管理它,而不必将它们传递到批处理文件中,记住%1是$(OutputPath)等。