2

我正在尝试设置用于开发、调试和部署 Windows 桌面小工具的环境。我在项目中遇到了一些障碍,当配置设置为“调试”时,我无法在我的小工具上运行构建。如果配置设置为“发布”,则构建将执行以下自定义任务:

  1. 将小工具内容复制到单独的文件夹中。
  2. 缩小/混淆 javascript 文件,删除注释和空格。
  3. 将文件打包成 CAB 文件。
  4. 使用数字证书对 CAB 文件进行签名。

这运行得很好,我的“调试”配置定义了以下任务

  1. 将小工具文件夹复制到AppData\Local\Microsoft\Windows Sidebar\Gadgets\.
  2. 使用 IDesktopGadget 界面启动小工具。

如果我将这两个任务复制到“发布”配置中,它们运行得很好——没有任何问题。我尝试创建一个名为“Test”的单独配置,从“Release”配置中复制。

如果我尝试构建除“Release”之外的任何配置,我会收到一条即时消息,提示“构建成功”,但根本没有运行任何任务。

编辑:我已经开始赏金了,因为我仍然遇到与 VS 2010 RC 相同的问题,这非常令人沮丧。

进一步编辑:
感谢约翰,我能够调试构建过程。它使我意识到<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存在属性。我能做些什么?

4

2 回答 2

2

正如乔建议的那样:

像这样更改您的输出路径,看看是否可以解决问题:

<OutputPath>bin\Debug\</OutputPath>

更新

你试过跑步msbuild /verbosity:diagnostic吗?

您可以尝试一下并显示输出吗?

第二次更新

使一个目标“构建”,然后在该目标中执行两项任务:

<Target Name="Build">
    <CallTarget Targets="BuildRelease" Condition="'$(Configuration)' == 'Release'" />
    <CallTarget Targets="BuildDebug" Condition="'$(Configuration)' == 'Debug'" />
</Target>

<Target Name="BuildRelease">
    <!--
        <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="BuildDebug">
  <CopyToGadgets GadgetFolder="$(GadgetFolder)" GadgetName="$(GadgetName)" />
  <RunGadget GadgetName="$(GadgetName)" />
</Target>
于 2010-02-12T16:59:02.493 回答
2

只是一个猜测:

您的 Debug 构建将其输出路径设置为bin\Release\. 中文件的时间戳bin\Release\可能导致 MSBuild 断定调试版本已经是最新的。尝试将输出路径更改bin\Debug\为调试版本。

于 2010-01-21T14:48:13.733 回答