便携式类库中引用资源文件时,ResourceMap未找到错误(ResourceMap not fou

2019-09-17 14:45发布

我现在面临的问题有如下:

我已经开发出一种便携式类库来封装服务连接。 这里面类库有包含字符串一个Resources.resw文件。 这些字符串仅由类库的方法调用(例如重写的ToString()方法)。

正如我说,这是一种便携式的类库。 如果我引用它作为一个DLL,或者甚至内部的另一种解决方案的一个项目,它被建造和正确编译。 然后,我让我的使用应用程序内这个库的方法的调用,说

        ClientFacadeConnector connector = new ClientFacadeConnector();
        ICollection<SearchResult> results = null;
        string message = string.Empty;

        if (maxResults != -1) //Search with max Results
        {
            try
            {
                if (!contextQuery.Trim().Equals(string.Empty))
                {

                    results = await connector.GetConnected().SearchAsync(contextQuery, query, maxResults);
                    message = "Search with ContextQuery " + contextQuery + ", Query " + query + ", max results " + maxResults.ToString();
                }
                else
                {

                    results = await connector.GetConnected().SearchAsync(query, maxResults, true);
                    message = "...using normal Query search, Query " + query + ", max results " + maxResults.ToString();
                }
            }
            catch (IQserException ex)
            {
                message = ex.Message;
            }
        }


        if (results != null)
        {
            ICollection<LocalSearchResult> contentResults = new List<LocalSearchResult>();
            foreach (SearchResult s in results)
            {
                var q = s.ToString();
                var contentItem = await connector.GetConnected().GetContentAsync(s.ContentId);
                LocalSearchResult lContent = new LocalSearchResult(contentItem);
                lContent.Score = s.Score;
                lContent.Relevance = s.Relevance;
                lContent.MarkFullText(query);
                contentResults.Add(lContent);
            }

在这里我呼吁s.ToString()方法的时候,我得到一个错误“资源地图未找到”。

为了解释这个地方来自:

public static class AppResources
{
    private static ResourceLoader resourceLoader;

    static AppResources()
    {
        // Load local file Resources.resw by default
        resourceLoader = new ResourceLoader();            
    }

    public static string GetResources(string key)
    {
        if (string.IsNullOrEmpty(key))
            throw new ArgumentNullException("key");

        return resourceLoader.GetString(key);
    }

}

和重写的ToString()方法内有代码,如下所示:

    public override string ToString()
    {
        StringBuilder buf = new StringBuilder(AppResources.GetResources("InstrSearchResultContent"));

        if (ContentId != -1)
        {
            buf.Append(AppResources.GetResources("StringContent") + " ID:" + ContentId.ToString() + " | ");
        }
        else
        {
            buf.Append(AppResources.GetResources("StringNo") + AppResources.GetResources("StringContent") + "ID" + " | ");
        }
        ...

资源文件被称为resources.resw并且是资源加载,如果没有其他的被称为调用默认resw文件。

奇怪的是,如果我复制的资源文件的客户端应用程序内本地,它是通过正确的类库的资源文件,一切工作的所有呼叫引用。

这个类库应该结束的时候是一个SDK。 我是否需要单独分配的资源文件?

这样的问题我从来没有与正常的类库和RESX文件经历。 Resw是给我毛骨悚然..

Answer 1:

发表@Rory麦克劳德接受的答案可能不再是真实的。 我试着和VS警告说, ResourceLoader(String)不推荐使用。 在我的情况下,下面的工作:

var loader = ResourceLoader.GetForCurrentView();
string localName = loader.GetString("someKey");


Answer 2:

它看起来像你必须在创建指定资源地图的名称ResourceLoader ,就像这样:

resourceLoader = new ResourceLoader("Assembly/ResourceFile");

例如,如果你的类库被称为“Company.Lib.dll”,和你的资源文件是“Resources.resw”,你可以使用:

resourceLoader = new ResourceLoader("Company.Lib/Resources");

这似乎并不被MSDN上完整记录 - 这意味着你可以指定你的资源文件的名称,但它可能是只适用于那些在Windows Store应用项目资源文件。 正是这个网页是让我明白了,图书馆,你需要指定程序集的名称为好。



Answer 3:

我也有过类似的问题,即使有重复所有步骤如何加载字符串资源 。 问题是,我Resources.resw文件是空的。 当我增加了一些假的串这一切开始工作正常。



Answer 4:

我有一个类似的问题,我通过改变resw文件PRIResource在属性的生成操作解决。 我已经更名为现有RESX到resw但文档不提,你也必须改变生成操作。



Answer 5:

发展与类库一个UWP应用程序时,我遇到了类似的问题。 所以,我在我的图书馆/Strings/en-Us/Resource.resw文件。

ResourceLoader.GetForCurrentView().GetString("someKey");

给出了一个例外

 new ResourceLoader("Company.Lib/Resources").GetString("someKey");

给我不赞成警告,但作品。

我的解决方案,它不发出警告的是:

ResourceLoader.GetForViewIndependentUse("AssemblyNamespace/Resources").GetString("someKey");


文章来源: ResourceMap not found error when referencing a resource file within a portable class library