如何创建单独的资源文件进行调试和发布?

时间:2018-07-11 14:00:26

标签: c# asp.net-mvc embedded-resource

是否可以创建两个文件,例如Text.Debug.resxText.Release.resx,在调试和发布程序期间会自动加载适当的资源文件?

2 个答案:

答案 0 :(得分:1)

我将包装ResourceManager:

public class Resources
{
    private readonly ResourceManager _resourceManager;

    public Resources()
    {
#if DEBUG
        const string configuration = "Debug";
#else
        const string configuration = "Release";
#endif

        _resourceManager = new ResourceManager($"StackOverflow.Text.{configuration}", typeof(Resources).Assembly);
    }

    public string GetString(string resourceKey)
    {
        return _resourceManager.GetString(resourceKey);
    }
}

很显然,在更新管理器时,应适当地修改名称空间。

编辑

您也可以将其实现为静态类,以避免必须重新创建包装器实例:

public static class Resources
{
    private static ResourceManager _resourceManager;

    public static string GetString(string resourceKey)
    {
        if (_resourceManager != null)
        {
            return _resourceManager.GetString(resourceKey);
        }

#if DEBUG
        const string configuration = "Debug";
#else
        const string configuration = "Release";
#endif

        _resourceManager = new ResourceManager($"StackOverflow.Text.{configuration}", typeof(Resources).Assembly);

        return _resourceManager.GetString(resourceKey);
    }
}

答案 1 :(得分:0)

在属性下创建 2 个子目录:调试和发布。将您的 Resources.resx 和 Resources.Designer.cs 文件复制到每个目录中。它将使用命名空间 ProjectName.Properties.Debug 或 ProjectName.Properties.Release 重新生成 Resources.Designer.cs 文件。编辑 .csproj 文件以在这些文件上放置适当的条件,如下所示:

<Compile Include="Properties\Debug\Resources.Designer.cs" Condition="$(Configuration.StartsWith('Debug')) ">
   ...

<EmbeddedResource Include="Properties\Debug\Resources.resx" Condition="$Configuration.StartsWith('Debug'))">
   ...

然后在Properties目录下添加一个Resources.cs文件,用#if DEBUG判断它是继承自Properties.Debug.Resources还是Properties.Release.Resources:

namespace ProjectName.Properties
{
    class Resources
#if DEBUG
        : ProjectName.Properties.Debug.Resources
#else
        : ProjectName.Properties.Release.Resources
#endif
    {
    }
}