【问题标题】:LC.exe could not be runLC.exe 无法运行
【发布时间】:2012-08-10 16:58:06
【问题描述】:

在编译时我收到LC.EXE 的错误

The specified task executable "LC.exe" could not be run. The filename or extension is too long

当我编译我的单元测试项目时会发生这个错误。在我见过的谷歌技巧中,没有任何效果。

  • 我设置为 Target framework = ".NET Framework 4" 而不是客户端配置文件。

从今天开始。源代码控制历史中几乎没有任何内容。这些更改都与AssemblyInfo.cs 有关,其中第 3 方实用程序会增加我们的版本号。

更新
查看我的输出窗口,对 LC.EXE 的命令行调用是 HUGE

编译Licx文件:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\LC.exe /target:BuildAll.Tests.dll /complist:Properties\licenses.licx /outdir:obj\Debug\ /i:C:\

有 100 个 /i 参数...

【问题讨论】:

  • 什么是LC.exe,为什么它在编译时运行?
  • 我认为当他们不想在社区中发布时,LC.exe 用于许可证项目。事实上,它将在程序集中嵌入公钥,只有拥有私钥的其他公司才能使用它@jrummell
  • 我遇到了同样的错误。看来我的项目中有太多引用。当我添加“Microsoft.Sharepoint”时,它爆炸了。当我删除该引用时,它再次编译。
  • 这些答案似乎都没有给出真正的解决方案。它们似乎只是短期的解决方法。对于引用量非常大的项目(包括间接引用),问题还是会出现。 MSFT 需要一个可扩展的解决方案来解决这个问题。

标签: c# .net visual-studio-2010


【解决方案1】:

有 MS Support 解决方法:

当你构建项目时,从项目中删除许可证文件 每次遇到此错误,只需删除许可证文件

https://connect.microsoft.com/VisualStudio/feedback/details/779433/lc-exe-task-command-line-too-long

【讨论】:

  • 删除 licx 文件会使我的 exe 未经许可
【解决方案2】:

我在文件licenses.licx 上将属性Build Action 的值从EmbeddedResource 更改为None。它解决了这个问题。

【讨论】:

  • 不知道它是否适用于 OP,但对我来说它有效。我想如果它也适用于 OP,它应该被标记为接受的答案:)
【解决方案3】:

有同样的问题。 对于 Lc.exe,会生成一个命令行,最多限制为大约 32k 个字符。 在这个命令中,通常所有的引用都用它的全路径写入。

因此,如果您有很多参考资料,您可能会遇到麻烦。

您可以做一些事情: - 删除未使用的引用 - 确保你没有引用间接依赖。请改用您可以为程序集定义的提示路径。 - 缩短路径并放置参考 - 您可以创建一个虚拟驱动器将 refs 放在那里以获得缩短的可能参考路径(例如 Z:\my.dll)

【讨论】:

    【解决方案4】:

    我今天遇到了一个问题,当我将引用的路径更改为更长的路径时,它得到了解决。例如,我最初把它放在mydocuments\user\...\...\..。但是当我将路径更改为c:\dlls\ 时,它就像一个魅力。希望对您有所帮助。

    【讨论】:

    • 您的初始路径是否已完全解析(即C:\path\to\mydocuments\user\...)?
    【解决方案5】:

    我对文件 LC.exe 有一个严重的问题,一切都是因为我使用的组件位于网络驱动器 (G :) 中,从那个位置我永远无法编译可执行文件。 我终于通过在internet选项中添加站点Intranet可靠的网络驱动器的IP地址来解决。

    【讨论】:

      【解决方案6】:

      我使用此博客post 中提到的命令行实用程序“Subst”来解决我的 LC.exe 问题。

      1. 为您的构建打开正常或更高的详细信息。
      2. 在“输出”窗口中,检查正在执行 LC 任务的行。请注意,将有许多带有其他二进制文件路径的 /i 参数。
      3. 找到一个或多个路径,您可以使用“Subst”来帮助缩短路径,以帮助减少传递给“LC.exe”的所有参数的总长度。
      4. 接下来,在 Visual Studio 中打开问题项目的属性窗口并选择“引用”选项卡,然后添加您使用 Subst 定义的新驱动器。

      构建项目。

      请记住,Subst 不会在重启后持续存在。

      【讨论】:

      • 欢迎来到 SO。链接作为答案最适合 cmets 而不是答案。我建议编辑上述答案以添加主要部分,以便将其放在一个地方。
      【解决方案7】:

      我遇到了同样的问题,我将这段代码添加到我的项目中并且它有效。

      <Target Name="WorkaroundMSBuild2836" BeforeTargets="CompileLicxFiles">
         <!-- Work around https://github.com/Microsoft/msbuild/issues/2836 by
              temporarily setting TargetFrameworkVersion to a version high
              high enough to cause the LC task to use a response file. -->
         <PropertyGroup>
            <_OriginalTargetFrameworkVersion>$(TargetFrameworkVersion) 
            </_OriginalTargetFrameworkVersion>
            <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
         </PropertyGroup>
      </Target>
      <Target Name="UndoWorkaroundMSBuild2836" AfterTargets="CompileLicxFiles">
         <PropertyGroup>
         <TargetFrameworkVersion>$(_OriginalTargetFrameworkVersion) 
         </TargetFrameworkVersion>
         </PropertyGroup>
       </Target>
      

      更多信息请阅读this post

      【讨论】:

        猜你喜欢
        • 2013-01-21
        • 2014-11-24
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 2020-12-20
        • 2017-07-10
        • 2012-03-15
        相关资源
        最近更新 更多