Silverlight MSBuild任务 - 在Xap复制到ClientBin后执行命令行

时间:2012-04-09 13:02:27

标签: silverlight command-line msbuild

我有一个Silverlight项目安排如下:

  • 实例
    • Silverlight的

        • 调试
    • ExampleCode
      • {Multiple Sub directories}
  • Silverlight.Web
      • 调试
        • 的ClientBin
          • Silverlight.Web.xap

Silverlight DLL中包含{Multiple Sub Directories}下的代码并进行编译,但是我也希望将这些文件作为“内容”包含在xap文件中。想想.NET控件的演示应用程序,它们会向您展示演示,但也会使用C#/ xaml代码来实现它。这就是我想要做的。

  • 我无法选择包含内容,因为它们已包含在编译
  • 我不能包含两次文件并编译一个并满足另一个,因为VS2010不会让你。

我想在输出xap文件中包含Examples / Silverlight / ExampleCode文件夹下的所有文件/文件夹。为此,我在Silverlight.Web项目上尝试了一个构建后事件。语法如下:

"$(SolutionDir)..\Lib\7Zip\7z.exe" a  -tzip 
    "$(ProjectDir)ClientBin\Silverlight.Web.xap" 
    "$(SolutionDir)Examples\Silverlight\Bin\Debug\ExampleCode"

现在,如果我在控制台窗口中执行它,它可以完美地运行。 xap文件已更新。但是,如果我从Silverlight.Web中的后期构建事件中执行它,则不会发生任何事情(没有失败,只是没有)。

我假设在创建xap文件之前,触发了构建后事件。

将xap文件复制到ClientBin之后,是否有人知道如何使用参数运行MSbuild任务或命令行后期构建事件?

1 个答案:

答案 0 :(得分:2)

您可以通过将文件添加到Silverlight项目的XapFilesInputCollection目标中的AfterCompile来解决此问题。但请注意,在Visual Studio中编译时,直接在项目中包含bin文件夹可能会导致访问被拒绝错误。

<Target Name="AfterCompile">
  <ItemGroup>
    <XapFilesInputCollection Include="$(SolutionDir)Examples\Silverlight\Bin\$(Configuration)\ExampleCode"/>
  </ItemGroup>
</Target>