我有一个c#ClickOnce应用程序,我需要能够多次发布以供OEM使用。
我现在理解的方式是发布设置位于.csproj文件中。 但是,在我想发布多个版本的情况下,这是不方便的。
例如,公司A需要完全不同的图标,开始菜单位置,公司B的产品名称等,但不需要重命名组件。以下是我可以考虑解决此问题的一些方法/问题......
1.有没有办法在构建期间创建单独的发布设置文件?
2.我可以在构建时使用MSBuild.exe编辑特定的发布设置(如“开始菜单位置”等)吗?我觉得这很理想...... e.g。
MSBuild.exe project.sln / target:发布/属性: edit-project-publish-settings-here
3.也许可以创建第二个.csproj文件? (宁愿不这样做......)
请分享您对最佳方法的想法,或任何其他巧妙的方法来实现这一目标。谢谢!
答案 0 :(得分:2)
我希望我能给你一些出色的解决方案,但我个人可能会选择3。
我的意思是,它非常简单,变化应该是非常静态的,并且很难完全搞砸它并将错误的更改部署到错误的公司。
答案 1 :(得分:1)
我发现您可以使用MSBuild.exe编辑某些属性,如此
MSBuild Solution.sln / target:publish /property:ProductName=ProductA\;Publisher=CompanyA\;ApplicationIcon=companyA.ico
我在modifying.csproj files programatically上发现了另一个有用.NET代码的有用帖子。 (只有当您修改的内容比下面的ClickOnce文档中指定的项目属性更深时才需要这样做)
这里的MSBuild documentation也很有用 - 特别是在发布属性
下答案 2 :(得分:1)
如果在项目文件夹中复制.csproj,它将引用所有相同的源文件,您只需更改可执行文件名即可。创建另一个VS解决方案,您可以引用复制的.csproj并删除您的第一个,以便您可以发布两个单独的版本。
然而,这对于ClickOnce来说并不理想。
如果使用指定“模式”(公司A,B,C等)的Singleton对象,则可以轻松地将其存储在app.config(或其他xml文件)中。然后只需重新发布您的ClickOnce应用程序,但复制配置文件的正确版本,以便它随构建一起提供。 这样,您不需要任何其他csprojects 只需包含所有图标,并根据您的Singleton对象在App Start上的运行时设置它们。