Не удалось запустить LC.exe

При компиляции я получаю сообщение об ошибке LC.EXE

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

Эта ошибка возникает при компиляции моего проекта unit test. Из трюков 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...

Ответ 2

Я изменил значение свойства Build Action с EmbeddedResource на None в файле licenses.licx. Это решило проблему.

Ответ 3

была та же проблема. Для Lc.exe создается командная строка, которая ограничена символами порядка 32 тыс. Символов. В этой команде обычно все ссылки записываются с помощью полного пути.

поэтому, если у вас есть много ссылок, вы можете столкнуться с проблемами.

Есть несколько вещей, которые вы можете сделать:  - Удалить неиспользуемые ссылки  - Убедитесь, что вы не ссылаетесь на косвенные привязки. Используйте вместо этого путь подсказки, который вы можете определить для сборок.  - Укоротить путь, в котором расположены ссылки  - Вы можете создать виртуальный диск, чтобы поместить refs туда, чтобы получить короткий путь ссылки (например, Z:\my.dll)

Ответ 4

У меня была проблема сегодня, и она была решена, когда я изменил путь ссылки на более длинный путь. Например, я изначально положил его в mydocuments\user\...\...\... Но когда я изменил путь к c:\dlls\, он работал как шарм. Надеюсь, что это поможет.

Ответ 5

У меня была плохая проблема с файлом LC.exe, все было связано с тем, что компоненты, которые я использовал, были в сетевом диске (G:) и с этой позиции я никогда не смог скомпилировать исполняемый файл. Я наконец решил, добавив IP-адрес сетевого диска между сайтами intranet, надежными в настройках Интернета.

Ответ 6

Я использовал утилиту командной строки "Subst", указанную в этом блоге post, чтобы решить мою проблему с помощью LC.exe.

  • Включите Normal или выше. Верность для вашей сборки.
  • В окне "Вывод" проверьте строку, в которой выполняется задача LC. Обратите внимание, что будет много параметров /i с путями к другим двоичным файлам.
  • Найдите один или несколько путей, которые вы можете использовать "Subst", чтобы сократить путь, чтобы уменьшить общую длину всех параметров, переданных в "LC.exe".
  • Затем откройте окно свойств проекта проблемы в Visual Studio и выберите вкладку "Ссылки", а затем добавьте новые диски, которые вы определили с помощью "Подписки".

Создайте проект.

Помните, что Подстановка не сохраняется при перезагрузке.

Ответ 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>

Для получения дополнительной информации прочитайте этот пост