我面临的问题如下:
我开发了一个可移植的类库来封装服务连接。在这个类库中有一个包含字符串的 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让我毛骨悚然..