如何将构建后事件限制为仅为一种类型的构建运行?
我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。
如何将构建后事件限制为仅为一种类型的构建运行?
我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。
当前回答
生成前和生成后事件作为批处理脚本运行。您可以在$(ConfigurationName)上执行条件语句。
例如
if $(ConfigurationName) == Debug xcopy something somewhere
其他回答
生成前和生成后事件作为批处理脚本运行。您可以在$(ConfigurationName)上执行条件语句。
例如
if $(ConfigurationName) == Debug xcopy something somewhere
您可以将配置名称传递给构建后脚本,并在那里检查它是否应该运行。
用$(ConfigurationName)传递配置名。
检查它取决于您如何实现构建后步骤——它将是一个命令行参数。
从Visual Studio 2019开始,现代的.csproj格式支持直接在目标元素上添加条件:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
UI没有提供设置这个的方法,但是如果您通过UI进行更改,它似乎可以安全地将Configuration属性保留在适当的位置。
供你参考,你不需要使用goto。shell IF命令可以用圆括号括起来:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
这在Visual Studio 2015中为我工作。
我将所有DLL文件从位于与我的解决方案文件夹同一级别的库文件夹中的文件夹复制到正在构建的项目的目标目录。
使用项目目录中的相对路径,用..\..\lib两步往上走文件夹结构
MySolutionFolder ……。 自由
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")