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

C# 如何为应用程序的不同版本交换资源?,c#,.net,wpf,visual-studio,C#,.net,Wpf,Visual Studio,我正在开发一个应用程序,它至少有2个(如果不是3-4个)不同的版本(不要问)。除了产品名称、窗口标题、应用程序图标和字符串或图像资源的一些其他细微差异外,这些应用程序基本上是相同的 我的主要目标是避免为每个可执行文件创建多个项目。我希望能够有一个主应用程序项目,让它只加载那些资源(名称、图标等),并且不知道它是哪个版本。通过这种方式,我可以简单地配置安装项目,以使用该应用程序的版本部署适当的资源。理想情况下,它在安装后不会对最终用户可见 我尝试过的内容:我尝试过创建不同的.resx文件并根据非构

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

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

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

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


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

在不知道需要深入到什么程度的情况下,您可以将资源打包到单独的.dll文件中,并以这种方式进行区分。例如,将各种不同的版本构建到一个单独的DLL中,并让安装程序调整名称以符合应用程序的期望,或者使用XML配置文件指定要加载的文件,并以这种方式加载

将允许您加载替代程序集

Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();

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

请参阅:

在不知道需要深入到多深的情况下,您可以将资源打包到单独的.dll文件中,并以这种方式进行区分。例如,将各种不同的版本构建到一个单独的DLL中,并让安装程序调整名称以符合应用程序的期望,或者使用XML配置文件指定要加载的文件,并以这种方式加载

将允许您加载替代程序集

Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();

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

请参阅:

是的。。。这可能也是我要去的地方。。。我想知道,如果我们将来需要这样做,这将如何影响本地化。我正在讨论如何创建那些拥有资源的程序集。是的。。。这可能也是我要去的地方。。。我想知道,如果我们将来需要这样做,这将如何影响本地化。我正在讨论如何创建具有这些资源的程序集。