无法运行LC.exe

时间:2012-08-10 16:58:06

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

编译时,我收到LC.EXE

的错误

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

编译单元测试项目时会发生此错误。在我看过的google技巧中,没有任何效果。

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

今天开始了。源控制历史中几乎没有任何东西。所有更改都与AssemblyInfo.cs有关,其中第三方实用程序会增加我们的版本#。

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

CompileLicxFiles:
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参数......

7 个答案:

答案 0 :(得分:13)

有MS支持解决方法:

  

构建项目时,从项目中删除许可证文件   每次出现此错误时,只需删除许可文件

即可

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

所以如果你有很多参考文献,你可能会遇到麻烦。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分: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>

有关更多信息,请阅读this post