【问题标题】:How licenses.licx file is used如何使用 licenses.licx 文件
【发布时间】:2011-08-03 11:49:10
【问题描述】:

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

【问题讨论】:

标签: c# visual-studio msbuild cruisecontrol.net


【解决方案1】:

由于您指出StellarEleven's reply 没有帮助,我猜您正在寻找更简单的东西。这可能不是 100% 正确,但这是我对其工作原理的理解:

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

文件中每一行的格式如下:

[Component Name], [Assembly Name]

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

nsoftware.IPWorks.Netdial, nsoftware.IPWorks

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

这有帮助吗?

【讨论】:

  • 您知道 LC.exe 如何验证机器是否具有适当的许可证吗?我在许可证文件中有 publicKeyToken 。是LC.exe用来验证的吗?谢谢!
  • 我不这么认为。我相信您所说的 publicKeyToken 是用来确保引用的程序集没有被篡改的。 LC 使用的机制是该问题的另一个答案中描述的机制 - 特别是组件的 LicenseProvider 属性(如果有),然后通过反射进行查询(调用 GetLicense)。如果我理解正确(我可能没有正确理解),那么从该调用返回的 License 对象会被序列化到 .licenses 文件中。
  • 不幸的是,由于 LicenseProvider 是通过反射访问的,因此每个许可组件都可以(并且很可能确实)使用自己的机制来确定构建机器上的许可状态。
【解决方案2】:

Licenses.licx file woes

在 ASP.NET,WTF 部门下归档。

当您使用我们的 Web 应用程序开发 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,版本=8.2.4.0,文化=中性, PublicKeyToken=9b171c9fd64da1d1

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

但这不是 licenses.licx 的最大问题。事情是 如果您打开 解决方案(这是“感人的”,就像将文件日期更改为 当前日期/时间)。这会对许可造成严重破坏,尤其是如果您 碰巧在未经许可的机器上打开解决方案并且您正在使用 源头控制。突然你的构建机器会抛出这些 “无法转换”消息,您不知道出了什么问题。 另一个普遍存在的问题是当你有一个开发团队在工作时 关于解决方案:他们都在无意识地“修改”这个文件。

所以,答案似乎不是将 licenses.licx 文件放在 源头控制。 (KB article)

但这个问题的解决方案引发了另一个危险信号:如果其中一个 团队中的开发人员添加了一个需要许可的新控件 表格中,一行被添加到他的本地 licenses.licx 文件中,它可能 不会反映在源代码管理中。 Bam,你的构建机器失败了 build 和添加控件的 Joe 必须为 团队合作,直到其他人破坏构建。

恐怕我对后一个问题没有好的解决方案,因为 不幸的是,“没有把 licenses.licx 放在源代码控制中”似乎 成为每个人解决许可问题的方式。其他 解决方案是完全删除 licenses.licx 文件,然后获取 Visual Studio 通过打开解决方案重新生成它(尽管这 在构建机器上有点困难)。

无论如何,希望对大家有所帮助。然后用你的笔记本电脑 手机并没有真正的帮助。

【讨论】:

  • 最后一句话“用手机敲打你的笔记本电脑并没有真正的帮助。” .....太棒了
【解决方案3】:

我们使用自定义签入策略 (TFS),如果存在于签入列表中,则显式地将 this 的内容清空。

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 2010-10-10
    • 2014-05-23
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2018-10-05
    • 2012-11-19
    相关资源
    最近更新 更多