VS2010构建脚本以将DLL打包到MSI&;在GAC中注册
本文关键字:amp GAC 注册 MSI 脚本 构建 DLL VS2010 | 更新日期: 2023-09-27 18:20:30
我需要在多个平台上打包和发布.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)独立项目。
- 我是否需要为丢失的版本(例如.NET 3.5、SL 3.0和5.0)创建更多的csproj项目
- 我希望为所有Silverlight DLL创建一个MSI,为所有WPF dll创建一个MSI。我是否需要为编译为试用版的版本创建更多的MSIs?对于.NET或Silverlight框架的每个版本,单独的MSIs又如何呢
- 是否可以使用build.targets或构建脚本来实现上述部署打包
基本上,如果我为上述所有组合手动创建MSIs并进行完全重建,这将起作用,但在发布更新时也是一个费力的过程。我正在寻找如何通过构建脚本、build.targets、MSI配置或以上组合来实现这一点的建议。
最后,在重新分发控制库时,理想情况下,安装应导致在GAC中注册。
欢迎任何意见/建议。
请注意,
如果您发布的是不同版本的框架,那么您将需要不同的项目。你可能可以在运行时切换目标框架,但变量太多了,当你把它们都弄清楚并测试好时,你就可以很容易地创建额外的项目了。
我认为投资于Installshield这样的安装工具是非常值得的,它内置了对您所需其余功能的支持。
我认为,您应该能够使用各种交换机和最终用户密钥(触发试用或实际安装)在一个installshield项目中完成所有需求,但您可能会考虑根据您的许可方案将试用和实际分开。
更新
您也可以通过纯VS2010解决方案来解决这个问题,它只是更复杂而已。
根据您的目标,您总共需要5个项目,每个解决方案将有2个配置,一个用于发布,一个供试用(预处理器定义已设置)。
您可能可以使用包含所有5个项目的单个构建解决方案,因为您可以在VS设置项目中单独引用每个项目的输出。
在发布时,您将不得不运行两次构建,一次用于发布,另一次用于试用,但使用MSBuild可以轻松地实现自动化。
我们为减轻发布过程的负担所做的是创建一个小型数据库来保存有关产品的配置信息(解决方案、项目文件和程序集的位置),以及一个小型UI应用程序,该应用程序通过首先在必要的地方更改版本,然后通过visual studio构建过程构建安装程序解决方案来构建应用程序。
当我输入上面的内容时,我只记得一个非常重要的注意事项:有一点(可能已经修复),不可能通过MSBuild构建Visual Studio 2010安装项目,这就是为什么我们通过devenv.com进行构建。
由于competent_tech提供了信息丰富的答案,因此我记录了我提出的解决方案。
使用msdos批处理文件解决,如下所示。
- 放弃了#If试用开关的想法。相反,组件是由licx文件授权的,所以试用版和发布版是一样的。这意味着只有一个开发工作的解决方案,构建输出来自
- 创建了一个批处理文件以使用MSBuild重新生成Silverlight和WPF输出项目,并切换工具版本以创建多个版本
- 将DLL复制到Nuget风格的目录结构,例如Build/lib/net40、Build/lib/sl4、Build/lib/sl5等
- 混淆已构建的库
- XCopy example projects over to Build/examples/
- 使用Powershell编辑示例项目以引用新的模糊输出
如需参考,请参阅以下关于使用powershell 删除/重新添加引用和编辑项目文件的问答