如何为不同版本的应用程序交换资源?

时间:2013-01-10 21:58:59

标签: c# .net wpf visual-studio

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

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

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

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

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

1 个答案:

答案 0 :(得分: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