2

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

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

  1. 签署需要完全信任的 XBAP 项目
    PFX 文件是要走的路,还是在使用 CI 服务器时这是更好的方法?
    (我们昨天遇到了这个问题)。

  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 将所有内容粘合在一起,整个构建/发布过程是自动化的,并且需要保持这种状态。

任何建议表示赞赏!

4

1 回答 1

1

这是我们迄今为止发现的。当然,这不是“最佳实践”,但它是一个开始:

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

一旦我弄清楚如何解决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 文件中读取或写入版本属性值。编写或在网络上找到一些东西来做类似的事情并不难。

于 2009-10-26T06:36:20.073 回答