c# - 如何为插件程序集设置 TeeChart.licenses 文件
问题描述
我使用 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 复制到输出目录也可以正常工作,但这是不可取的。
解决方案
TeeChart 教程说可以选择调用插件构造函数来手动传递包含许可证的程序集:但这实际上不适用于 Steema.TeeChart.WPF.TChart(截至 steema.teechart.net.4.2019.8.8)。我反编译了代码并验证了那些插件构造函数对传递的实例没有任何作用。
整个许可证领取过程如下所示:
- 首先,它检查嵌入在起始程序集中的名为“*TeeChart.licenses*”的第一个资源。
- 然后它在工作目录中检查名为“TeeChart.licenses”的文件。
- 然后在开始组装位置检查资源文件“steema.resources”并从那里获取名为“TeeChart”的资源。
- 然后在开始组装位置检查资源文件“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);
}
}
推荐阅读
- tensorflow - 批量计算损失函数的有效方法?
- api - Keycloak - 使用管理 API 向用户添加客户端角色
- mysql - 表格太宽,无法放入 Markdown 生成的 PDF
- spring - 如何使用 Spring Security 将登录的用户重定向到他的首页,将未登录的用户重定向到不同的用户
- r - 敏感性、特异性
- matlab - 将代码从一侧 p 值调整为两侧
- python - 如何在变量名中存储具有两个索引的数组?
- java - 使用 JRE 从 javafx 项目创建可执行的 .exe 文件
- python - 绘制使用来自 Keras 的现有激活函数定义的新激活函数
- java - 根据来自另一个数据集的值将列添加到数据集