Подтвердить что ты не робот

Ошибка MSBuild "CSC: ошибка CS2001: Исходный файл" x "не найден" со связанными файлами после обновления до Visual Studio 2012

После автоматической обновления файла проекта для веб-приложения .NET 4.0 для работы с Visual Studio 2012 все сначала работало нормально, но при компиляции я получил много ошибок, таких как:

Описание: Исходный файл '.. \.. \.. \.. \..\File Path' не найден.

Файл: CSC

И когда вы пытаетесь создать с помощью MSBuild (передавая только полный путь проекта, без дополнительных параметров) в "Командная строка разработчика для VS2012", я получил в основном те же ошибки:

"CSC: ошибка CS2001: Исходный файл" x "не найден"

Все ошибки относятся к Связанным файлам (aspx, cs и т.д.), расположенным в других проектах веб-приложений, расположенных в глубине нашей ветки кода (поэтому все "...." в начале путей)

Для меня это выглядит как проблема с файлом Length. У меня была такая же проблема некоторое время назад при создании проектов на нашем сервере CI с использованием MSBuild, я смог управлять им, манипулируя файлы проекта перед их созданием с использованием пользовательского script без необходимости перемещать ветвь или уменьшать глубину проектов, мне не нужно было что-то перемещать, что важно в то время, когда разработчики, использующие Visual Studio 2010 может скомпилировать все без проблем. Я узнал, что компиляция/построение с помощью MSBuild отличается от того, что с DevEnv/VS, и, например, MSBuild не поддерживал создание проектов установки и DevEnv.

Так как это происходит сейчас с VS 2012/DevEnv 2012, плюс, что VS 2012 больше не поддерживает проекты настройки (например, msbuild), плюс VS/DevEnv имеет ту же проблему с длиной файла, похоже, VS 2012 наконец, используя msbuild под капотом или более тесно интегрированы, однако я не нашел статьи, подтверждающей это.

Изменение структуры ветки/изменение глубины проектов теперь не является вариантом по нескольким причинам (большая база кода, большое количество проектов, риск, время, усилия и т.д.).

У кого-то есть альтернативное решение или исправление для этой проблемы в Visual Studio 2012?

Привет,

P.D.: BTW Я уже проверил это сообщение Ошибка MSBuild со связанными файлами, но, как я уже сказал, перед изменением путей это не вариант прямо сейчас.

4b9b3361

Ответ 1

Я знаю, что я задал этот вопрос некоторое время назад, но для того, что стоит. Подход, который мы, наконец, пошли, был:

  • Поиск файлов, которые были указаны как слишком длинные.
  • Уменьшить длину полного пути этих файлов, уменьшив длину имени и/или длина папки контейнера или уменьшение вложенности папок уровень. Поэтому уменьшая длину полного пути.
  • Обновите ссылки измененных файлов (переустановки) на зависимые проекты.

Это решило проблему с Visual Studio 2012 на рабочих станциях разработчиков и на наших серверах CI/Deploy, которые использовали MSbuild.

В моем сценарии этот подход был менее рискованным и подразумевал меньше усилий, чем перемещение полных проектов/решений для снижения уровня их вложенности в папки или сокращение имен папок и необходимость обновления всех ссылок зависимого проекта/решений.

Ответ 2

Попробуйте получить журналы сборки,

http://msdn.microsoft.com/en-us/library/vstudio/ms171470.aspx

Кажется, что задача csc не могла найти исходный файл. Одной из причин является то, что вы импортируете неправильный файл. поэтому вам нужно отредактировать файл проекта через обычный текстовый редактор.

Ответ 3

Я нашел решение этой проблемы, когда вы связали файл, ваш относительный путь распознается msbuild и вернется оттуда, он станет вашим путем в длинном пути, однако вы можете изменить его в определении проекта, выполняя правильное щелкните/выгрузите проект/и измените путь от ../../../ до $(SolutionDir)/../.., пока не найдете файл для ссылки, обратите внимание: он расширяет символ от 255 до 300 символов.

Ответ 4

Хорошо, я ударил это и решил сегодня. Я нашел его, следуя руководству msdn (https://msdn.microsoft.com/en-us/library/ms379563%28v=vs.80%29.aspx), и вот команда, которая сломала для меня:

csc /t:library /out:MyCodeLibrary.dll simpleType.cs

Предоставление мне сообщения

error CS2001: Source file 't:librabry' could not be found

Что работало после изменения исходной команды на следующее:

csc /target:library /out:MyCodeLibrary.dll simpleType.cs

Я не уверен, почему короткая версия флага /target вызывает эту ошибку, но я не нашел нигде в сети, заметив эту причину специально, поэтому я хотел записать ее здесь.

Ответ 5

  • Убедитесь, что у вас есть последняя версия связанных файлов из других проектов. Visual Studio не будет автоматически получать их, если они принадлежат к другому проекту.
  • Убедитесь, что связанные пути действительно верны. Вы можете контролировать, какие файлы VS.NET и MSBUILD пытаются получить с помощью инструмента SysInternals ProcMon (фильтровать имена процессов и отфильтровывать все успехи).
  • Если вы подозреваете, что длина пути является проблемой (это также будет видно в инструменте ProcMon), вы можете попытаться сократить их, связываясь с абсолютным путем (C:\X\Y\Z) вместо относительный путь (......\Z). Местоположение связанных файлов может оставаться без изменений.

Ответ 6

Мои 2 цента на эту проблему... В моем случае у меня был файл, созданный в одном проекте (например, ConfigModel), и у меня была ссылка на этот файл в другом проекте, но когда я переименовал файл ConfigModel в первый проект к LoginModel, например, он не переименовал ссылку во втором проекте, вызвав эту ошибку.

Ответ 7

Эта проблема возникла для меня, когда я вернулась к более ранней версии репозитория git. По-видимому, я не добавлял файл проекта в репо, поэтому, когда он возвращался, он также не возвращал файл проекта. Я прояснил это, чтобы исключить отсутствующий файл .cs из проекта, нажав на отсутствующий файл в Проводнике проектов. Его было легко найти, поскольку он был отмечен предупреждающим треугольником. Затем перестройте все решение.