无法找到与用户控件文件,但没有(在这种情况下)标签(Can't find file with

2019-10-20 16:16发布

我有一个DLL中的用户控件Controls ,在DLL中的转换器Base的DLL和语言资源的Languages

当我一切都结合以下方式,一切工作正常:

<Label Content="{Binding FallbackValue='[Design] Name', ConverterParameter='Name', Converter={StaticResource Translate}}"
           ContentStringFormat="{}{0}:"/>

没有错误,当我运行我的应用程序的参数正确的单词Name被加载(在我的情况纳摩荷兰)。

我也试试这个对我WatermarkTextBox是这样的:

<c:WatermarkTextBox Watermark="{Binding FallbackValue='[Design] Name *', ConverterParameter='Name', Converter={StaticResource Translate}}" />

但后来我得到以下错误:

无法加载文件或程序集“文件:/// C:\ Languages.dll”或它的一个依赖。 该系统找不到指定的文件。

为什么会出现这种情况与我WatermarkTextBoxControls DLL而不是与Label

Answer 1:

这里的第一步是确保,大会文件Languages.dll是在应用程序目录中实际存在(通常bin/Debug/ )。 如果不是-作为错误信息说-系统无法找到指定的文件......在这种情况下的解决方法是引用的程序集Languages.dll在您的应用程序项目。 为了避免这种情况,请确保你每次添加一个引用到一个组件,同时也增加了引用该组件的依赖关系。 也就是说,如果你有一个应用程序项目App它引用库LibA.dllLibA引用库LibB.dll ,你应该添加一个参考LibB.dll在你的App的项目也是如此。 这样一来,所有必需的组件将始终被复制到输出目录。

如果组件正确位于输出目录,但你仍然得到错误信息,在99%的情况的问题是在建设目标不匹配,唉为其组件建成的平台。 确保所有项目针对同一平台(x86的,例如)。 您可以检查目标在项目属性选项卡。

编辑:

好吧,我刚才了解你谈论在Visual Studio中的XAML设计师设计时间错误:)问题是组件的名称: Noru.Languages.dll 。 我想,结束.Languages被认为是一个资源名称和Visual Studio中的程序集名称禁止资源名称。 有一个注册表项HKLM\Software\Microsoft\VisualStudio\12.0\Designers\AllowResourcesInFilename ,也许与试验可以解决该问题。 不是100%肯定,但。 无论如何,如果你重命名大会Nori.Language.dll项目的属性和重建一切,设计时支持是背部和控件在设计正确显示。

编辑2:

真是奇怪的行为完全...嗯,这条线在类Language很可能是原因? 尝试在这里指定满弦......工作的呢?

ResourceManager rm = new ResourceManager("Noru.Languages.Language", System.Reflection.Assembly.LoadFrom("Noru.Languages.dll"));

编辑3:

显然,这个问题是我在编辑2.上述行我已经试验了一下:

/// <summary>
/// Will return the requested text in the language the application is in. Case sensitive.
/// </summary>
/// <param name="s">Provide a listed String from the language files.</param>
/// <returns>Will return a System.String in the language of the application.</returns>
public static string GetText(string s)
{
    //return Culture.ToString();
    //return Assembly.GetExecutingAssembly().FullName;
    //ResourceManager rm = new ResourceManager("Noru.Lang.Resource1", Assembly.GetAssembly(typeof(Language)));
    //ResourceSet rs = rm.GetResourceSet(Culture, true, true);

    var rs = LanguageResource.ResourceManager;
    try
    {
        return rs.GetString(s);
    }
    catch (Exception)
    {
        return "not found";
    }
}

最后一个版本(不注释掉)的作品,因为我已经通过设置生成的资源文件的代码AccessModifier在资源编辑器公共(双击资源文件,你会在工具栏中找到它)。

这个版本(从不介意资源的名称,我尝试了不同的版本在这里):

ResourceManager rm = new ResourceManager("Noru.Lang.Resource1", Assembly.GetAssembly(typeof(Language)));

抛出另一个错误,称它无法找到组件内部的资源。 我觉得有什么错的使用ResourceManager这里。 我不是专家,所以我不知道为什么。 我只知道,最后的版本似乎按预期工作......我希望,你会发现相同;)



文章来源: Can't find file with UserControl but not (in this case) Label