gpt4 book ai didi

c# - 在可移植类库中引用资源文件时找不到 ResourceMap 错误

转载 作者:可可西里 更新时间:2023-11-01 08:54:05 25 4
gpt4 key购买 nike

我遇到的问题如下:

我开发了一个可移植类库来封装服务连接。在这个类库中有一个包含字符串的 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,如果没有调用其他文件,它是 ResourceLoader 调用的默认 resw 文件。

奇怪的是,如果我将资源文件复制到本地客户端应用程序中,所有对类库资源文件的调用都会正确引用它,并且一切正常。

这个类库完成后应该是一个SDK。我需要单独分发资源文件吗?

这样的问题我在普通的类库和resx文件中从来没有遇到过。 Resw 让我毛骨悚然..

最佳答案

看起来你必须在创建 ResourceLoader 时指定资源映射的名称,如下所示:

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

例如,如果您的类库名为“Company.Lib.dll”,而您的资源文件为“Resources.resw”,您将使用:

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

这在 MSDN 上似乎没有完整记录 - 它建议您可以只指定资源文件的名称,但它可能只适用于 Windows 应用商店应用程序项目中的资源文件。 It was this page这告诉我,对于库,您还需要指定程序集名称。

关于c# - 在可移植类库中引用资源文件时找不到 ResourceMap 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10800730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com