20

在编译时,我收到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 的命令行调用是巨大的

编译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参数...

4

7 回答 7

15

有 MS Support 解决方法:

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

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

于 2013-07-23T11:33:12.560 回答
15

我将文件上的属性值Build ActionEmbeddedResource更改为。它解决了这个问题。Nonelicenses.licx

于 2018-04-12T13:55:42.880 回答
2

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

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

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

于 2013-03-04T13:52:04.583 回答
0

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

于 2013-03-05T23:34:12.640 回答
0

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

于 2015-01-20T16:03:17.690 回答
0

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

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

构建项目。

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

于 2017-06-07T01:59:19.613 回答
0

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

<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>

欲了解更多信息,请阅读这篇文章

于 2019-06-14T07:43:44.420 回答