首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResourceManager.GetString返回null

ResourceManager.GetString返回null
EN

Stack Overflow用户
提问于 2019-01-30 20:11:20
回答 1查看 1.3K关注 0票数 1

我正在尝试读取一些.sql文件,我已经嵌入到一个名为SQLUpdateScripts的resx文件中。我在SQLupdateScripts.resx中的所有文件都是00001.sql、00002.sql、0003.sql等格式。

代码语言:javascript
复制
for (int i = DbVersion+1; i <= FileDbVersion; i++)
            {
                 string updateScripts = "script_" + i.ToString("D5");
....
var sqlqueries = myString.Split(new[] { "\nGO", "\ngo" }, StringSplitOptions.RemoveEmptyEntries);
etc....

我在stackoverflow中尝试了许多建议,但所有这些建议都返回null或异常

代码语言:javascript
复制
ResourceManager sqLUpdateScripts = new ResourceManager(typeof(SQLUpdateScripts));
                string myString = sqLUpdateScripts.GetString(updateScripts);

也是

代码语言:javascript
复制
object[] args = new object[] { updateScripts };

SQLUpdateScripts obj = new SQLUpdateScripts();
obj.GetType().InvokeMember(updateScripts,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, obj, args);

对于每个sql文件,SqlUpdateScripts.Designer.cs中的代码是

代码语言:javascript
复制
internal static string script_00001 
    {
        get {
            return ResourceManager.GetString("script_00001", resourceCulture);
            }
    }
internal static string script_00002 
   {
        get {
            return ResourceManager.GetString("script_00002", resourceCulture);
        }
    }  

我读到我必须使用反射来调用每个文件作为方法,通过使用invokeMember给我的异常,无法找到类SqlUpdateScripts.script_0001‘。当我尝试使用ResourceManager时,它只是将myString作为null返回。

如果我用手打电话:

代码语言:javascript
复制
var sqlqueries = SQLUpdateScript.script_0001.Split(new[] { "\nGO", "\ngo" }, StringSplitOptions.RemoveEmptyEntries);

它工作得很好,但我想使用文件名的变量,而不是标准的文件名

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-31 00:26:38

我找到问题了。这是我犯的一个转储错误。在DBVersion和fileDBVersion中测试时,我给出了错误的值,所以当我使用

代码语言:javascript
复制
for (int i = DbVersion+1; i <= FileDbVersion; i++)

它没有给我赋值script_00001,而是给我赋值script_01001,所以现在它可以工作了,我发现可以用两种方法在resx文件中以字符串形式调用文件

首先:

代码语言:javascript
复制
ResourceManager sqLUpdateScripts = new ResourceManager(typeof(SQLUpdateScripts));
string myString = sqLUpdateScripts.GetString(updateScripts);

第二种方式:

代码语言:javascript
复制
string resVal = SQLUpdateScripts.ResourceManager.GetString(updateScripts, Thread.CurrentThread.CurrentCulture);

第二种方法中的GetString有两个重载,一个是不带CultureInfo的重载,另一个是指定CultureInfo的重载,例如,如果你想调用另一种语言。

我不知道是否有办法在调用错误的resx资源时避免将来的错误,也许有一种方法可以枚举所有的资源,然后选择一个。

如果我找到一种方法,我会把它添加到这里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54440367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档