【问题标题】:Integrating XBAP into ASP.NET web application, continuous integration server and release process将 XBAP 集成到 ASP.NET Web 应用程序、持续集成服务器和发布过程中
【发布时间】:2009-10-20 01:45:23
【问题描述】:

您好,我听取了那些将需要完全信任的基于 WPF Web 的应用程序或 XAML 浏览器应用程序 (XBAP) 实现到持续集成服务器(如 CruiseControl.NET)以及他们的正常构建/发布过程。

具体来说,我感兴趣的是:

  1. 签署需要完全信任的 XBAP 项目
    PFX 文件是可行的方法,还是使用 CI 服务器时更好的方法?
    (我们昨天打了this problem)。

  2. 将 XBAP 项目发布到 ASP.NET Web 应用程序中
    2.1 这应该在“发布”配置构建中自动执行吗?
    2.2 发布的输出是否应该进入 Bin 目录?
    2.3 我们是否应该避免使用 .deploy 文件扩展名并尽可能重用现有程序集?
    (在 ASP.NET Web 应用项目中已经使用了很多类库)

  3. 部署需要完全信任才能从 ASP.NET Web 应用程序使用的 XBAP

  4. XBAP 项目版本控制
    我们是否应该使用与 ASP.NET Web 应用程序项目中其他程序集相同的版本?

背景信息:

  • XBAP 项目用于设计用于我们的 ASP.NET Web 应用程序的报告。它是产品的一个组成部分。
  • 编译 XBAP 和 Web 应用程序项目后,我们使用 Web 部署项目,然后我们的 Wix 项目使用该项目的输出来构建 MSI 安装程序。
  • 我们将 CruiseControl.NET 用于 CI,Subversion 用于 RCS,MSBuild 将所有内容粘合在一起,整个构建/发布过程是自动化的,需要保持这种状态。

任何建议表示赞赏!

【问题讨论】:

    标签: asp.net continuous-integration cruisecontrol.net xbap


    【解决方案1】:

    这是我们目前所发现的。当然,这不是“最佳实践”,但这是一个开始:

    签署需要完全信任的 XBAP 项目。

    一旦我弄清楚如何使用solve the issue 将 CI 服务器作为服务运行,PFX 就可以正常工作了。

    将 XBAP 项目发布到 ASP.NET Web 应用程序中。
    2.1 这应该在“发布”配置构建中自动执行吗?
    2.2 发布的输出是否应该进入 Bin 目录?
    2.3 如果可能,我们是否应该避免使用 .deploy 文件扩展名并重用现有程序集?

    复制到 Bin 导致 IIS7 中的 RequestFilteringModule 出现问题,因此我们没有使用它。

    在 AfterBuild 目标中,我们将输出复制到 ASP.NET Web 应用程序的目录中,而不是发布,Subversion 会忽略该目录,但 Web 部署或 wix 项目不会。 所以我们复制我们需要的东西(dll、exe、manifest、xbap),然后使用一些 MSBuild 魔术重命名为 .deploy 扩展,因为某些客户端可能会阻止 .exe 或 .dll 下载:

    <Target Name="AfterBuild">
      <CallTarget Targets="CopyOutputToDeployWebDir" />
    </Target>
    
    <Target Name="CopyOutputToDeployWebDir">
      <CreateProperty Value="..\Path\To\Application\Dir">
        <Output TaskParameter="Value" PropertyName="DeployWebDir" />
      </CreateProperty>
      <RemoveDir Directories="$(DeployWebDir)" />
      <MakeDir Directories="$(DeployWebDir)" />
      <ItemGroup>
        <DeployWebFiles  Include="$(OutputPath)*.dll;$(OutputPath)*.exe;$(OutputPath)*.manifest;$(OutputPath)*.xbap" />
       </ItemGroup>
       <Copy SourceFiles="@(DeployWebFiles)" DestinationFolder="$(DeployWebDir)" />
       <ItemGroup>
         <RenameFiles Include="$(DeployWebDir)*.dll;$(DeployWebDir)*.exe" />
       </ItemGroup>
       <Move SourceFiles="@(RenameFiles)" DestinationFiles="%(RenameFiles.FullPath).deploy" />
    </Target>
    

    部署需要完全信任才能从 ASP.NET Web 应用程序使用的 XBAP。

    目前,我们似乎需要在受信任的根证书存储和受信任的发布者证书存储中安装签名密钥。

    版本控制 XBAP 项目。

    我们想要与我们的 ASP.NET Web 应用程序版本相同的 XBAP 应用程序版本(在我们的例子中,AssemblyFileVersion 属性),所以我们结束了绕过正常的 ApplicationVersion 属性方法,从我们共享的 AssemblyInfo 文件中覆盖它产品中的所有组件:

    <!-- Note that this value is overridden in BeforeBuild target -->
    <ApplicationVersion>0.0.0.0</ApplicationVersion>
    <!-- ... -->
    <Target Name="BeforeBuild">
      <CallTarget Targets="SetApplicationVersion" />
    </Target>
    <!-- Always set application version to product version -->
    <Target Name="SetApplicationVersion">
      <UpdateVersion Attribute="AssemblyFileVersion" AssemblyInfo="..\ProductAssemblyInfo.cs">
        <Output PropertyName="ApplicationVersion" TaskParameter="Version" />
      </UpdateVersion>
    </Target>
    

    UpdateVersion 是一个自定义 MSBuild 任务,可以在 AssemblyInfo 文件中读取或写入版本属性值。编写或在网络上找到一些东西来做类似的事情并不难。

    【讨论】:

    • 这对我来说是有用的信息,但是,我正在为 MSBuild 的实际“发布”目标而苦苦挣扎。如何调用对 XBAP 和依赖文件进行签名的 Publish 例程?
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2010-12-05
    相关资源
    最近更新 更多