我有一个包含在我的项目属性中的licenses.licx文件。我不确定它的dll是如何使用它的。它是否由msbuild使用?你知道在构建解决方案时它是如何使用的吗?
发布于 2015-09-16 12:05:38
将此文件放在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 article)
但是这个问题的解决方案抛出了另一个危险信号:如果团队中的一个开发人员向窗体添加了一个需要许可的新控件,则会在他的本地licenses.licx文件中添加一行代码,并且该代码可能不会反映在源代码管理中。Bam,你的构建机器构建失败,而Joe,谁添加了控制,必须为团队购买甜甜圈,直到其他人破坏构建。
对于后一个问题,我恐怕没有很好的解决方案,因为不幸的是,“不将licenses.licx放在源代码控制中”似乎是每个人都在解决许可问题的方法。另一种解决方案是完全删除licenses.licx文件,然后通过打开解决方案让Visual Studio重新生成它(尽管在构建机器上这有点困难)。
无论如何,希望这一切都能在某种程度上有所帮助。用手机敲击你的笔记本电脑也不会有什么帮助。
发布于 2011-04-19 01:57:53
既然您指出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)嵌入到最终的可执行文件中。
这有帮助吗?
发布于 2018-06-06 15:02:47
我们使用一个自定义的签入策略(TFS),如果在签入列表中存在,它会显式地将this的内容设为空。
https://stackoverflow.com/questions/5628969
复制相似问题