首页 > 解决方案 > 如何为插件程序集设置 TeeChart.licenses 文件

问题描述

我使用 steema.teechart.net.4.2019.8.8 进行 WPF 开发。我需要在使用 TChart 控件的非 exe 程序集 (A) 中指定许可证,因为我无权访问执行程序集 (B)。为此,我:

但这不起作用,我在运行时仍然看到“这是一个评估版本......”;而设计时一切都很好。

您能否建议如何指定 TeeChart.licenses 不是为正在执行的程序集,而是为实际使用 TChart 的程序集指定?

PS:

标签: c#wpfteechart

解决方案


TeeChart 教程说可以选择调用插件构造函数来手动传递包含许可证的程序集:但这实际上不适用于 Steema.TeeChart.WPF.TChart(截至 steema.teechart.net.4.2019.8.8)。我反编译了代码并验证了那些插件构造函数对传递的实例没有任何作用。

整个许可证领取过程如下所示:

  1. 首先,它检查嵌入在起始程序集中的名为“*TeeChart.licenses*”的第一个资源。
  2. 然后它在工作目录中检查名为“TeeChart.licenses”的文件。
  3. 然后在开始组装位置检查资源文件“steema.resources”并从那里获取名为“TeeChart”的资源。
  4. 然后在开始组装位置检查资源文件“ResX\steema.resources”,并从那里获取名为“TeeChart”的资源。

在我的情况下,我只是动态创建了 steema.resources 文件并将非执行程序集的许可证嵌入其中:

    public static void FixTeeChartLicense(Assembly assembly)
    {
        var filename = "steema.resources";
        if (File.Exists(filename))
        {
            return;
        }

        var resourceName = assembly.GetManifestResourceNames().FirstOrDefault(s => s.Contains("TeeChart.licenses"));
        if (resourceName == null)
        {
            return;
        }

        using (var resourceStream = assembly.GetManifestResourceStream(resourceName))
        using (var resourceWriter = new ResourceWriter(filename))
        {
            resourceWriter.AddResource("TeeChart", resourceStream);
        }
    }

推荐阅读