调试错误:Licenses.licx:无法解析类型。

11
我正在使用 ComponentOne FlexGrid,它已自动在其许可证中注册:

C1.Win.C1FlexGrid.C1FlexGrid,C1.Win.C1FlexGrid.2, Version=2.6.20122.716,Culture=neutral, PublicKeyToken=79882d576c6336da

我还使用一个继承了 C1FlexGrid 的自定义控件,但在运行时它尝试在许可证文件中注册:

DataTree.C1FlexDataTree,fpstudio,Version=1.0.0.0,Culture=neutral, PublicKeyToken=null

这最终会创建一个错误:

Error 51 无法解析类型 'DataTree.C1FlexDataTree,fpstudio, Version=1.0.0.0,Culture=neutral, PublicKeyToken=null' C:_DEVELOPMENT_FP_DRAFT12\COMPONENT1_WORKING_MERGED\fpstudio\Properties\licenses.licx 3 Freepour Studio

我该如何告诉这个类不要尝试许可该控件,因为它已经被继承并且已经被许可了。我已经从 DataTree 类中删除了 [LicenseProvider()]

我不确定这是否会对您有所帮助,但每当我们遇到 ComponentOne 许可问题时,我们都会创建一个空白表单,添加适当的组件,然后重新构建应用程序。ComponentOne 然后会正确地向文件添加许可证。另外,您确定您在引用正确的版本吗?您尝试过将“Specific Version”设置为 false 吗? - Corey
你的licenses.licx文件的Compile操作属性设置为“嵌入式资源”了吗? - Steve
我有“Build Action: Embedded Resource”。我认为@notacat的答案是正确的。你不能阻止它,但你可以编辑licenses.licx文件以删除有问题的条目(在我的情况下,是我创建的扩展许可第三方组件的类)。每当我编辑使用该组件的表单时,它将稍后被添加,但可以重新删除。令人烦恼,但足够简单。 - JMD
4个回答

11

这真是个烦人的问题... 我建议你安装 EmptyLicensesLicx nuget 包,它将确保在编译项目之前有一个空的 Licenses.licx 文件(这就是你需要的)。


我希望早些时候就能找到这个软件包。 - Jack

2
我认为唯一的方法是手动编辑licenses.licx文件并从中删除DataTree.C1FlexDataTree。请注意,当您在设计器中使用表单和控件时,VS会自动编辑licenses.licx文件。如果您关闭所有设计器窗口并手动编辑licx文件,则您的更改将被保存,并且您可以避免问题。 licx文件最常见的问题是在将控件更新到其他版本后出现构建错误。为了避免这种情况,您可以完全删除此文件中的版本和公钥标记信息。之后它将与任何版本一起工作。即,您的licenses.licx文件内容应如下所示:
C1.Win.C1FlexGrid.C1FlexGrid, C1.Win.C1FlexGrid.2
DataTree.C1FlexDataTree, fpstudio

(或者没有DataTree.C1FlexDataTree行)。 注意,如果你打开设计器做一些改变,VS会再次编辑这个文件。没有办法阻止它。你将不得不再次编辑文件。


0
我发现解决方案是在项目中打开一个新的空白表单,将库中提供的每个对象添加到该表单中。 然后执行“生成”,Visual Studio会使用添加的对象的正确信息更新您的.licx文件,覆盖该文件中保存的任何旧日期。 与您的文件相关联的所有“未解析”类型都将被删除。

0
在我的情况下,解决方案非常简单,只需打开licenses.licx文件,清空内容,保存更改并重新运行解决方案。注意:不要删除文件,只需清空内容即可。
希望这对您有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接