【发布时间】: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