1

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

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

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

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

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

4

1 回答 1

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

于 2013-01-10T22:58:03.367 回答