1

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

  • 例子
    • 银光
      • 垃圾桶
        • 调试
    • 示例代码
      • {多个子目录}
  • Silverlight.Web
    • 垃圾桶
      • 调试
        • 客户端
          • Silverlight.Web.xap

{Multiple Sub Directories} 下的代码包含在 silverlight DLL 中并已编译,但是我还想将这些文件作为“内容”包含在 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 任务或命令行构建后事件?

4

1 回答 1

2

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

<Target Name="AfterCompile">
  <ItemGroup>
    <XapFilesInputCollection Include="$(SolutionDir)Examples\Silverlight\Bin\$(Configuration)\ExampleCode"/>
  </ItemGroup>
</Target>
于 2012-04-09T22:27:30.960 回答