【问题标题】:How to set TeeChart.licenses file for a plugin assembly如何为插件程序集设置 TeeChart.licenses 文件
【发布时间】:2019-08-21 16:53:40
【问题描述】:

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

  • 将 TeeChart.licenses 文件作为嵌入式资源添加到程序集 A 项目中。
  • 在创建任何其他 TChart 控件之前添加了一个“插件构造器”调用“new TChart(this)”(其中“this”是来自程序集 A 的类型实例)。

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

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

PS:

  • 在执行程序集中嵌入 TeeChart.licenses 可以正常工作,但这不是一个选项。
  • 将 TeeChart.licenses 复制到输出目录也可以正常工作,但这是不可取的。

【问题讨论】:

    标签: c# wpf teechart


    【解决方案1】:

    TeeChart 教程说可以选择调用plugin-constructor 来手动传递包含许可证的程序集: 但这实际上不适用于 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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-28
      • 2015-11-04
      • 2012-12-30
      • 2011-12-08
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多