【发布时间】:2010-01-21 14:32:08
【问题描述】:
我正在尝试设置用于开发、调试和部署 Windows 桌面小工具的环境。我在项目中遇到了一些障碍,当配置设置为“调试”时,我无法在我的小工具上运行构建。如果配置设置为“发布”,则构建会执行以下自定义任务:
- 将小工具内容复制到单独的文件夹中。
- 缩小/混淆 javascript 文件,删除 cmets 和空格。
- 将文件打包成 CAB 文件。
- 使用数字证书签署 CAB 文件。
这运行得很好,我的“调试”配置定义了以下任务
- 将小工具文件夹复制到
AppData\Local\Microsoft\Windows Sidebar\Gadgets\。 - 使用 IDesktopGadget 界面启动小工具。
如果我将这两个任务复制到“发布”配置中,它们运行得很好——没有任何问题。我尝试创建一个名为“Test”的单独配置,从“Release”配置中复制。
如果我尝试构建“发布”以外的任何配置,我会收到一条即时消息,提示“构建成功”,但根本没有任何任务运行。
编辑:我已经开始赏金了,因为我在 VS 2010 RC 上仍然存在同样的问题,而且非常令人沮丧。
进一步编辑:
感谢 John,我能够调试构建过程。它让我意识到带有调试条件的<Target> 元素被完全忽略(甚至没有处理)。当我交换 <Target> 元素的位置时,它起作用了:
<Target Name="Build" Condition="'$(Configuration)' == 'Release'">
<!--
<Obfuscate PathToJasob="C:\Program Files (x86)\Jasob.com\Jasob 3.5" Path="$(GadgetFolder)" Output="$(GadgetName)_obf" log="jasob_log.txt" />
-->
<BuildGadget BuildFormat="CAB" Path="$(GadgetFolder)" Target="$(GadgetName).gadget" />
<SignGadget CertName="Cert1" TimestampURL="http://timestamp.comodoca.com/authenticode" Target="$(GadgetName).gadget" />
</Target>
<Target Name="Build" Condition="'$(Configuration)' == 'Debug'">
<CopyToGadgets GadgetFolder="$(GadgetFolder)" GadgetName="$(GadgetName)" />
<RunGadget GadgetName="$(GadgetName)" />
</Target>
所以看起来第二个<Target Name="Build"> 元素覆盖了第一个元素,尽管存在Condition 属性。我能做什么?
【问题讨论】:
-
进行诊断日志记录时的构建输出是什么? (将
/verbosity:diag作为标志传递给 msbuild 命令行) -
在运行调试构建之前是否删除了所有以前创建的 dll 和 pdb 文件,以确保 msbuild 认为它们不是最新的?您是否也从卷影副本缓存中删除了这些文件(在“c:\documents and settings\
\local settings\”中的某个位置)?
标签: visual-studio-2010 msbuild windows-desktop-gadgets