【问题标题】:How do I remove directory in Visual Studio pre-build event using conditional compiler constants?如何使用条件编译器常量删除 Visual Studio 预构建事件中的目录?
【发布时间】:2016-11-21 17:18:30
【问题描述】:

我们有各种与 ClickOnce 安装程序相关联的 VB.NET 解决方案,但我们不需要/不想保留以前的安装程序版本。所以我今天所做的是为项目添加一个预构建事件,删除安装程序的“应用程序文件”文件夹:

rd /s /q "\\myserver\myapp\Application Files"

这很好用。

现在我们有了另一个使用自定义编译器常量构建的解决方案(通过 Visual Studio 中的高级编译选项设置) - 如果存在名为 APP1 的常量,那么它的编译方式与常量 APP2 存在时不同,随后我们有关联 ClickOnce 安装程序的不同发布文件夹,因此需要删除与当前版本关联的正确“应用程序文件”文件夹。

如果存在 APP1,则 ClickOnce 输出文件夹为“\myserver\app1\Application Files”,类似地,如果存在 APP2,则 ClickOnce 输出文件夹为“\myserver\app2\Application Files”。请注意,这些位置是 UNC 设置并以双“\”开头,但由于某种原因在这篇文章中没有显示为双!

所以我一直在研究在我的预构建事件中访问这些编译器常量,我最终得到:

if "$(DefineConstants.Contains(APP1))" (rd /s /q "\\myserver\App1\Application Files")

if "$(DefineConstants.Contains(APP2))" (rd /s /q "\\myserver\App2\Application Files")

因此,如果我将编译器常量设置为 App1 并尝试构建,我会得到:

错误命令 "if "True" (rd /s /q "\myserver\App1\Application Files") if "False" (rd /s /q "\myserver\App2\Application Files")" 以代码 255 退出。

我尝试了各种方法,使用When/Choose,使用rmdir 等,但我总是以255 错误退出;那么有谁知道这是为什么......更重要的是,知道我该如何解决它?

干杯,

克里斯。

【问题讨论】:

    标签: visual-studio msbuild conditional clickonce pre-build-event


    【解决方案1】:

    我创建了一个演示并在我这边重现了您的问题,请像这样修改您的预构建事件:

    if $(DefineConstants.Contains(APP1)) == True (rd /s /q "\\myserver\App1\Application Files")
    
    if $(DefineConstants.Contains(APP2)) == True  (rd /s /q ""\\myserver\App2\Application Files ")
    

    【讨论】:

    • 它说我应该避免添加只说“谢谢”的 cmets - 但我还应该如何感谢 Cole Wu - 因为你的回答很棒 - 谢谢!!
    猜你喜欢
    • 2018-07-20
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2011-09-15
    • 2016-11-06
    相关资源
    最近更新 更多