Visual studio 什么';Visual Studio 2008在生成后事件之后执行的事件是什么?

Visual studio 什么';Visual Studio 2008在生成后事件之后执行的事件是什么?,visual-studio,silverlight,msbuild,build-process,Visual Studio,Silverlight,Msbuild,Build Process,我只是创建了一个包含3个项目的解决方案 逐条建造顺序 包含在ASP.NET Web应用程序项目的/ClientBin中的Silverlight应用程序 Windows窗体应用程序,用于在Visual Studio通过生成(生成后事件)时优化/ClientBin中的所有xap ASP.NET Web应用程序在/ClientBin中显示Silverlight应用程序 当我成功构建ASP.NET web应用程序时,web应用程序项目中的ClientBin目录包含3个Xap文件。在此之后,VS.net触

我只是创建了一个包含3个项目的解决方案

逐条建造顺序

  • 包含在ASP.NET Web应用程序项目的/ClientBin中的Silverlight应用程序

  • Windows窗体应用程序,用于在Visual Studio通过生成(生成后事件)时优化/ClientBin中的所有xap

  • ASP.NET Web应用程序在/ClientBin中显示Silverlight应用程序

  • 当我成功构建ASP.NET web应用程序时,web应用程序项目中的ClientBin目录包含3个Xap文件。在此之后,
    VS.net
    触发一个执行Windows窗体应用程序的生成后命令事件。Windows窗体从3个Xap文件优化所有Xap和远程2个Xap文件

    最后,Vs.net再次将3个Xap文件从Silverlight应用程序项目复制到ClientBin目录。为什么?我找不到任何关于在生成后事件后复制Xap文件的日志(使用MSBuild项目生成输出详细信息:诊断)

    更新


    我通过构建Windows窗体应用程序更新了构建顺序。构建web应用程序后。接下来,我使用Windows Dorm应用程序后期生成事件来执行其EXE。一切正常。但我不喜欢这个解决方案,因为它对我来说是一个非常奇怪的解决方案。

    这并不能完全解决您的场景,但仅供参考,PostBuildEvent似乎是构建过程中的最后一步;您可以通过检查了解有关订购的更多信息

    c:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets


    这显示了msbuild逻辑。

    我不知道您到底有什么问题,但如果您的项目存在任何依赖关系,您应该命令它们正确生成。

    我假设这些项目相互引用?因此:

    • ASP.NET Web应用程序至少引用了SilverLight应用程序
    • Win Forms应用程序引用Silverlight应用程序
    Visual Studio将自动将从属文件复制到项目层次结构中,除非您告诉它不要这样做。因此,Visual Studio将采取以下步骤:

  • 构建SilverLight应用程序,并将其输出复制到Forms应用程序和Web应用程序
  • 运行SilverLight应用程序项目的“生成”选项卡中定义的任何生成后事件
  • 构建Win Forms应用程序,如果它被其他任何东西引用,请适当复制输出
  • 运行Win Forms应用程序项目“生成”选项卡中定义的任何生成后事件
  • 构建Web应用程序
  • 运行Web应用程序项目的“生成”选项卡中定义的任何生成后事件
  • 运行通过MSBuild定义的任何“生成后”事件
  • 基本上,大多数从属移动发生在构建后事件之前:

    Task "FindUnderPath"
      Comparison path is "D:\Projects\PublicSites\WebTest".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "bin\".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "obj\Debug\".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "RemoveDuplicates"
    Done executing task "RemoveDuplicates".
    Done building target "_CleanGetCurrentAndPriorFileWrites" in project
      "WebTest.csproj".
    Target "IncrementalClean" in file 
      "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
    Task "FindUnderPath"
      Comparison path is "bin\".
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "obj\Debug\".
    Done executing task "FindUnderPath".
    Task "Delete"
    Done executing task "Delete".
    Task "RemoveDuplicates"
    Done executing task "RemoveDuplicates".
    Task "WriteLinesToFile"
    Done executing task "WriteLinesToFile".
    Done building target "IncrementalClean" in project 
      "WebTest.csproj".
    
    然后生成和后生成事件发生


    我的猜测是,VS注意到SilverLight应用程序的输出与它下面的版本不同,因此会获取一个新副本。

    但我认为所有SilverLight应用程序项目在web应用程序项目构建完成后会再次将所有xap复制到clientbin。我不知道为什么。这很奇怪。另外,在后期构建事件完成之前,我尝试通过7-Zip打开xap文件(对于锁文件)。但是我在VS.net的控制台中找不到任何错误消息。是的!我认为是这样。如何禁用将新副本提取到ClientBin目录?能否使Web项目引用Win Forms项目而不是SilverLight项目的XAPs输出?这样你就能得到优化的版本而不是原始版本了?或者:让Win Forms应用程序在web应用程序构建之后而不是之前优化Client_Bin文件夹中的XAP。我应该创建自定义项目/解决方案来实现这一点。
    Task "FindUnderPath"
      Comparison path is "D:\Projects\PublicSites\WebTest".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "bin\".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "obj\Debug\".
      Path [...]
      [...]
    Done executing task "FindUnderPath".
    Task "RemoveDuplicates"
    Done executing task "RemoveDuplicates".
    Done building target "_CleanGetCurrentAndPriorFileWrites" in project
      "WebTest.csproj".
    Target "IncrementalClean" in file 
      "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
    Task "FindUnderPath"
      Comparison path is "bin\".
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
      Comparison path is "obj\Debug\".
    Done executing task "FindUnderPath".
    Task "Delete"
    Done executing task "Delete".
    Task "RemoveDuplicates"
    Done executing task "RemoveDuplicates".
    Task "WriteLinesToFile"
    Done executing task "WriteLinesToFile".
    Done building target "IncrementalClean" in project 
      "WebTest.csproj".