VS2010构建脚本以将DLL打包成MSI&在GAC注册

时间:2012-01-14 20:14:15

标签: c# .net silverlight visual-studio-2010 deployment

我需要跨多个平台打包和发布.NET控件库,并且有关于如何通过构建脚本和VS2010配置自动化此部署(或尽可能高效)的问题。

控件库将作为Silverlight版本(SL 3.0,4.0,5.0的单独版本)和WPF版本(.NET3.5 / .NET4.0的单独版本)发布。我还需要指定相同库的发行版和试用版。试用版将在代码中与预处理程序语句TRIAL区分开来。试用版和完整版都将以RELEASE模式编译。

我想知道如何以最有效的方式实现这一目标。我的VS2010解决方案目前有一个WPF(.NET 4.0)项目和一个SL(SL 4.0)项目。

  • 我是否需要为缺失的版本创建更多csproj项目,例如.NET 3.5和SL 3.0和5.0?
  • 我希望为所有Silverlight DLL创建一个MSI,为所有WPF dll创建一个MSI。我是否需要为编译为试用的版本创建更多MSI?对于每个版本的.NET或Silverlight框架,单独的MSI怎么样?
  • 是否可以使用build.targets或构建脚本实现上述部署打包?

基本上,如果我为所有上述组合手动创建MSI并执行完全重建,但是在发布更新时也是一个费力的过程。我正在寻找有关如何使用构建脚本,build.targets,MSI配置或上述组合实现此目的的建议。

最后,在重新分发控制库时,理想情况下安装应该在GAC中进行注册。

欢迎提出任何意见/建议。

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:2)

如果您要发布不同版本的框架,那么您将需要不同的项目。你可能可以在运行时切换目标框架,但是有很多变量,当你把它们全部弄清楚并经过测试时,你可以很容易地创建其他项目。

我认为投资安装工具(例如Installshield)非常值得您花钱,该工具内置支持您希望的其他功能。

我相信您应该能够使用各种交换机和最终用户密钥在单个installshield项目中完成所有需求(以触发试用或实际安装),但您可能会考虑将试用版和实际版分开,具体取决于您的许可方案

<强>更新

您也可以通过纯VS2010解决方案来解决这个问题,它更复杂。

根据您的目标,您需要总共有5个项目,每个解决方案将有2个配置,一个用于试用版本(设置预处理器定义)。

您可以使用包含所有5个项目的单个构建解决方案,因为您可以在VS安装项目中单独引用每个项目的输出。

在发布时,您必须运行构建两次,一次用于发布,一次用于试用,但您可以使用MSBuild轻松自动执行此操作。

我们为减轻发布流程负担所做的工作是创建一个小型数据库来保存有关产品的配置信息(解决方案,项目文件和程序集的位置)以及通过首先更改版本来构建应用程序的小型UI应用程序必要的,然后通过visual studio构建过程构建安装程序解决方案。

我记得的一个非常重要的注意事项是,当我输入上述内容时:在某一时刻(可能已修复),无法通过MSBuild构建Visual Studio 2010安装项目,这就是我们建设的原因通过devenv.com。

答案 1 :(得分:0)

  

为了后人的缘故,我正在记录我提出的解决方案,这要归功于 competent_tech 非常有用的答案。

使用msdos批处理文件解决如下问题。

  • 倾倒了#If Trial开关的想法。相反,组件由licx文件许可,因此试验版本与发布版本相同。这意味着只有一个开发工作的解决方案,其构建输出来自
  • 创建批处理文件以使用MSBuild重建Silverlight和WPF输出项目,切换toolversion以创建多个版本
  • 将DLL复制到Nuget样式目录结构,例如Build / lib / net40,Build / lib / sl4,Build / lib / sl5等......
  • 对已构建的库进行模糊处理
  • XCopy示例项目转到Build / examples /
  • 使用Powershell编辑示例项目以引用新的混淆输出。

供参考,请参阅removing/re-adding referencesediting project files以及powershell

上的以下问题和答案