【问题标题】:How can I prevent Visual Studio from creating license.licx如何阻止 Visual Studio 创建 license.licx
【发布时间】:2013-08-06 17:29:22
【问题描述】:

我们在项目中使用第三方控件。几乎每次当我双击一个也有设计视图的文件时,Visual Studio 都会尝试用英勇的努力来调动设计器,并且在一些反应迟钝之后,它会在我们的解决方案中提供(产生)一个 license.licx 文件。这不必要地干扰了源代码控制:文件添加也修改了 csproj,并且原始代码文件和 Designer.cs 也被检出(尽管它们没有任何修改)。

  1. 我只想看代码(右键,查看代码),不想看设计器视图。
  2. 每次我都需要撤消不必要的更改,这需要时间(我们的解决方案很庞大),而 Visual Studio 再次无响应,因为自从 csproj 更改后它会重新加载整个 shebang。
  3. 当我双击时,我立即意识到我做了什么,但那时已经太晚了,发条开始转动。

如果有人知道如何禁用添加该 licx,请告诉我。仅供参考:相关的第三方库是 DevExpress WinForms 和 IdeaBlade DevForce Classic(与 DevExpress 有一些集成)。我使用VS 2012。 而且我们的产品是最终用户产品,而不是第三方库。

澄清:我们谈论的是开发环境。请参阅How does the Licenses.licx based .Net component licensing model work?——不建议将其保留在源代码管理中。我不想讨论这个。让我们关注如何防止 Visual Studio 一直尝试创建它。

【问题讨论】:

  • 先生们,亲爱的投票者:即使你认为我的动机是错误的,我不应该删除 license.licx,让我们讨论一下,请考虑这个主题的结论可能对其他人有益和我一样。感谢您的理解!
  • 我删除了愤怒的脸,因为有些人可能认为它不好笑。
  • 另一方面;由于它是构建输入的一部分,为什么不希望它作为源代码控制的一部分进行管理?我确定您不会对在源代码管理中包含其他资源感到不安?
  • community.devexpress.com/blogs/ctodx/archive/2009/03/06/… "如果您打开解决方案,Visual Studio 倾向于接触此文件。这会对许可造成严重破坏,特别是如果您碰巧在未获得许可的机器上打开解决方案并且您正在使用源代码控制。突然之间,您的构建机器会抛出这些“无法转换”消息”
  • 从来没有任何问题,而且我的构建服务器构建了各种各样的项目,大多数涉及许可证;更多的是正确配置构建环境的情况...

标签: visual-studio devforce devexpress-windows-ui


【解决方案1】:

您可以创建一个为您删除 .licx 文件的构建后事件。我们已经处理了我们团队的这种烦恼,除了手动排除或删除它之外,构建后事件是您最好的选择。每次打开 Windows 窗体时,如果该窗体引用或使用任何第 3 方 .dll,则将再次添加该文件。

您可以通过控制台或右键单击项目并选择“属性”->“构建事件”来指定构建前和构建后的事件。希望这可以帮助。

【讨论】:

  • 非常感谢您的回答。很可能在 Visual Studio 中没有打开 licx 创建的开关,所以你的答案似乎是一个很好的解决方案。实际上,如果创建了这样的流氓 licx,我们有一个单元测试会失败,从而防止意外提交。你碰巧有一个示例后期构建脚本吗?您使用什么来操作构建后脚本中的解决方案? PowerShell + EnvDte 还是其他? StudioShell?
  • 您可以去 Post Build Event 并粘贴类似这样的内容... del "$(SolutionDir)Project\folder\license.licx" 应该会处理好它。
  • 删除 licenses.licx 会导致“找不到文件 ...\licenses.licx”错误。相反,我们可以添加这个预构建事件来创建(或覆盖)一个空的 licenses.licx:copy /y NUL $(ProjectDir)Properties\licenses.licx > NUL
【解决方案2】:

如果有人正在寻找此问题的解决方案,因为他们通过 Lc.exe 工具使用预编译的许可证,并希望防止 licenses.licx 在构建服务器上发生冲突,请编辑您的 csproj 文件,并更改如下所示的行:

<EmbeddedResource Include="Properties\licenses.licx" />

进入这个:

<ItemGroup Condition=" '$(Configuration)' != 'Release' " > <EmbeddedResource Include="Properties\licenses.licx" /> </ItemGroup>

【讨论】:

  • 这看起来很有希望。不过,我不再处于这种情况了。
【解决方案3】:

对于您的第 1 点,您可以阻止双击打开设计器,而是默认打开代码编辑器。

您可以这样做:

  • 右键单击具有表单的 .cs 文件
  • 选择“打开方式...”
  • 选择“CSharp 编辑器”(或 VB)
  • 点击“设为默认”
  • 然后确定

如果您想稍后将其更改回来,请按照相同的步骤但选择“CSharp 表单编辑器”。

【讨论】:

  • 很实用的想法!
【解决方案4】:

如果您使用EmptyLicensesLicx NuGet 包,它将在每次构建时在您的项目中创建一个空的Licenses.licx 文件(这是您真正需要的全部)。

【讨论】:

    【解决方案5】:

    license.licx 很重要。您确实希望在使用第三方许可组件的项目中使用它。如果不使用第三方组件,则不会添加 licences.licx 文件。

    【讨论】:

    • 为什么我需要 license.licx?如果我不小心双击该文件,它甚至都没有创建。它会在开发团队中引起问题吗?例如,John Doe 双击其他内容,然后生成一个内容不同的内容?我想引擎盖下有一些密码学。
    • (John Doe 和我在同一个软件上工作。而且我不希望在源代码控制中使用 licx。也许当我们制造发行版时我们会需要它。我们的产品是一个结束 -用户产品,而不是第三方库。我希望我们不会违反第三方供应商的任何许可。)
    • 所以简短的问题是:为什么它对我来说如此重要以至于我必须拥有它?我想要解释。
    • stackoverflow.com/questions/51363/… 不建议将其保留在源代码管理中。我们在同一来源的更多团队中工作。很多人。
    • 关于其他问题以及 Denis 的最高投票答案的建议是应该包含它,以便许可证编译器知道去寻找要包含在最终项目中的许可证.您是否尝试过删除所有 licences.licx、构建(甚至使用持续集成构建)并运行未安装开发人员版本控件的结果?我希望结果以某种方式行为不端......
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多