如何使用licenses.licx文件

61

我有一个licenses.licx文件,它包含在我的一个项目属性中。我不确定它是如何被其dll使用的。它是否被msbuild使用?你知道在构建解决方案时它是如何被使用的吗?


1
@ROMNANARMY:我看了那个帖子,但它并没有提供我所需要的信息。我只是想了解licenses.licx文件的一般工作原理。 - CharithJ
3个回答

36

由于您提到 StellarEleven的回复 没有帮助,我猜想您正在寻找更简单的方法。这可能不是100%正确的,但这是我对此如何工作的理解:

licx文件仅是应用程序使用的“已许可”组件列表。

文件中的每一行都采用以下格式:

[Component Name], [Assembly Name]
例如,我的一个项目使用了许可的IP Works NetDial组件,因此我的.licx文件包含以下行:

例如,我的一个项目使用了许可的IP Works NetDial组件,因此我的.licx文件包含以下行:

nsoftware.IPWorks.Netdial, nsoftware.IPWorks

在项目(.csproj)文件的上下文中,.licx文件被引用为嵌入式资源(EmbeddedResource)。在构建过程中,LC.exe验证执行构建操作的计算机是否具有相关组件的许可证,并生成一个二进制.licenses文件,该文件最终嵌入到最终可执行文件中作为资源([AssemblyName].exe.licenses)。

这能帮到你吗?


2
您有没有想过 LC.exe 是如何验证机器是否拥有适当的许可证的?我在许可证文件中获得了 publicKeyToken。这是 LC.exe 用来验证的吗?谢谢! - CharithJ
4
我不这么认为。我相信你所说的publicKeyToken是用于确保所引用的程序集没有被篡改。LC使用的机制是另一个回答中描述的机制,具体来说是通过反射找到组件(如果有)的LicenseProvider属性,然后查询它(调用GetLicense方法)。如果我理解正确的话(可能我不理解),从那个调用返回的License对象会被序列化到.licenses文件中。 - Richard J Foster
2
不幸的是,由于 LicenseProvider 是通过反射访问的,因此每个已获得许可的组件可能(并且很可能会)使用自己的机制来确定构建机器上的许可证状态。 - Richard J Foster

28

许可证.licx文件问题

这属于ASP.NET, WTF部门。

当您使用我们的控件开发Web应用程序时,会出现一个神秘的文件licenses.licx。不,这不是使用奇怪名称的棒棒糖的命令,而是由Visual Studio生成(和修改)的过渡文件,参与许可证检查。在设计模式下,Visual Studio使用此文件来记录您在设计中使用的每个已许可控件的注释。然后,在构建应用程序时,Visual Studio读取此licenses.licx文件,并为其中提到的每个控件加载相关的程序集并运行该程序集中的许可证代码,以查看该程序集是否已正确许可(即所属产品是否已正确安装在该计算机上)。如果一切正常,Visual Studio将许可证密钥嵌入可执行文件中。如果不行,您将收到有关控件未获得许可的奇怪错误消息(我的最爱是“无法将许可证文件'licenses.licx'转换为二进制资源。”,我通常会引用我祖先的丰富多彩的语言)。

licenses.licx实际上是解决方案中的一个文件(如果您看不到它,请单击“显示所有文件”)。Visual Studio使用名为lc.exe的程序将许可证编译为应用程序中的嵌入式资源,当许可证编译出现问题时,我还看到过引用此可执行文件的错误消息。

以下是licenses.licx文件中的一行示例。

DevExpress.XtraCharts.Web.WebChartControl,DevExpress.XtraCharts.v8.2.Web,Version=8.2.4.0,Culture=neutral,PublicKeyToken=9b171c9fd64da1d1

逗号分隔列表中的第一个值是类,第二个值是找到它的程序集,其他值是程序集的其余强名称。我相信您已经看到了问题,尤其是当您将解决方案升级到使用的第三方控件的最新版本时。如果您愿意,可以编辑此文件并轻松删除其中的强名称部分。

但是,licenses.licx的最大问题不是这个。事实上,Visual Studio有一种倾向,即如果您打开解决方案,则会触及此文件(这是“触摸”,即将文件日期更改为当前日期/时间)。这对许可证造成了混乱,特别是如果您在未获得许可的计算机上打开解决方案并且正在使用源代码控制。突然间,您的构建机器会抛出这些“无法转换”的消息,您会想知道发生了什么错误。另一个普遍存在的问题是,当您有一个团队的开发人员在解决方案上工作时:他们都不知不觉地“修改”此文件。

因此,答案似乎是不将licenses.licx文件放在源代码控制下。(KB文章)

但是,这个问题的解决方案又引起了另一个警告:如果团队中的一名开发人员向表单添加需要许可证的新控件,则会在其本地licenses.licx文件中添加一行,并且可能不会在源代码控制中反映出来。砰,您的构建机器无法构建,Joe(添加了该控件的人)必须为团队买甜甜圈,直到其他人破坏了构建。

很遗憾,我没有好的


3
“而用手机敲打你的笔记本电脑并不能真正有所帮助。” 这句话......很棒。 - Hakan Fıstık

-3

我们使用自定义的签入策略(TFS),如果在签入列表中出现,则明确将其内容置空。


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