2013-01-10 37 views
1

我开发的应用程序将有至少2个,如果不是3-4个不同的版本(不要问)。应用程序基本上是相同的,除了产品名称,窗口标题,应用程序图标以及字符串或图像资源中的其他细微差别外。如何为不同版本的应用程序交换资源?

我的主要目标是避免必须为每个可执行文件创建多个项目。我希望能够有一个主要的应用程序项目,并让它只加载这些资源(名称,图标等),并且不知道它是哪个版本。这样,我可以简单地配置我的安装项目,以使用该应用程序的版本部署适当的资源。理想情况下,最终用户在安装后不会看到它。

我试过了:我已经尝试过创建不同的.resx文件,并基于构建配置交换它们,或者我也尝试在变量上添加环境变量和#if。 但是,我真的不想要多个构建配置。我希望它只依靠部署。

是否可以在不同的项目或同一个项目中创建resx文件,并将它们从构建中排除,并将它们生成类似于本地化的卫星.DLL程序集,然后加载部署的任何一个应用程序?

我很困惑,如果我应该看看运行我自己的RESGEN和AL任务,或者如果我应该创建一个DLL项目(但也许那么我必须只有一个资源文件有多个DLL项目) 。另外,我可以找到的有关使用.RESX文件的任何文章都是针对本地化的。它依赖于设置CurrentCulture来解析要使用的特定资源。我的场景与文化无关...... 我只是想为应用程序的不同部署加载不同的资源。

回答

1

不知道你需要走多深,你可以将资源打包到单独的.dll文件中并区分这种方式。例如,将各种不同的版本构建到独立的DLL中,让安装程序调整名称以匹配应用程序所期望的或使用XML配置文件来指定以这种方式加载和加载的名称。

Assembly.Load()将允许您加载替代组件。

Assembly _assembly; 
_assembly = Assembly.GetExecutingAssembly(); 

Stream _imageStream; 
_imageStream = 
    _assembly.GetManifestResourceStream(
    "ThumbnailPictureViewer.resources.Image1.bmp"); 
Bitmap theDefaultImage = new Bitmap(_imageStream); 

参见:http://www.attilan.com/2006/08/accessing-embedded-resources-using.html

+0

是啊...这可能是我在那里去太...我不知道这将如何影响本地化,如果我们需要做的是,在未来的。我在讨论如何创建具有资源的程序集。 – Alan

相关问题