问候,我接受那些已经实现了需要完全信任的WPF基于Web的应用程序或XAML浏览器应用程序(XBAP)的建议,进入CruiseControl.NET等持续集成服务器,以及他们的正常构建/发布过程。
具体来说,我对以下内容感兴趣:
签署需要完全信任的XBAP项目 PFX文件是否可行,或者在使用CI服务器时这是一种更好的方法吗? (昨天我们点击了this problem。
将XBAP项目发布到ASP.NET Web应用程序
2.1这应该在“发布”配置版本上自动化吗?
2.2发布的输出是否应该进入Bin目录?
2.3我们是否应该避免使用.deploy文件扩展名并尽可能重用现有的程序集?
(ASP.NET Web应用程序项目中已经使用了许多类库)
部署需要完全信任的XBAP才能在ASP.NET Web应用程序中使用。
对XBAP项目进行版本控制 我们应该在ASP.NET Web应用程序项目中使用与其他程序集相同的版本吗?
背景资料:
任何建议表示赞赏!
答案 0 :(得分: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>
部署需要完全信任的XBAP,以便从ASP.NET Web应用程序中使用。
目前我们需要在受信任的根证书存储区和受信任的发布者证书存储区中安装签名密钥。
版本化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文件中的版本属性值。在网上写一些东西来做类似的事并不难。