VS2010 компилирует решение без ошибок, msbuild завершается неудачно: «фатальная ошибка CS0002: невозможно загрузить строку сообщения из ресурсов» - PullRequest
1 голос
/ 24 марта 2012

У меня много проблем с поиском причины этого сообщения об ошибке.У меня есть большое решение Visual Studio 2010, которое без ошибок компилируется на моем локальном компьютере, но на сервере сборки происходит сбой msbuild в одном из проектов с ошибкой:

фатальная ошибка CS0002: невозможно загрузить сообщениестрока из ресурсов

Вот красный раздел с ошибкой в ​​конце:

Build FAILED.

"C:\TeamCity\buildAgent\work\85eff164854b9e67\Libraries\Domainface.Proxy.Common\Domainface.Proxy.Common.csproj" (default target) (9) ->
(CoreCompile target) -> 
  CSC : fatal error CS0002: Unable to load message string from resources. [C:\TeamCity\buildAgent\work\85eff164854b9e67\Libraries\Domainface.Proxy.Common\Domainface.Proxy.Common.csproj]

    0 Warning(s)
    1 Error(s)

Весь вывод msbuild с сервера сборки находится здесь: http://pastie.org/3660842

К чему обычно относится ошибка, из-за которой она будет собираться локально, но не на сервере сборки?

ОБНОВЛЕНИЕ

Я только что запустил msbuild /version на обоихмашины и получается .NET Framework версии немного отличаются.Локальный компьютер - 4.0.30319.488, а сервер сборки - 4.0.30319.1.Я собираюсь запустить обновление Windows на сервере, чтобы позволить ему устанавливать некоторые обновления, так как некоторые из них, похоже, связаны с .net framework, поэтому я посмотрю, если это изменится.

ОБНОВЛЕНИЕ

Установка обновлений не помогла.Только что вспомнил, что я недавно скопировал csc.exe из асинхронного предварительного просмотра, чтобы упростить асинхронную компиляцию (фактический предварительный асинхронный предварительный просмотр не удалось установить на сервере из-за отсутствия Visual Studio, но установка средства просмотра команды Visual Studio кажетсяЯ исправил это, поэтому я просто запустил соответствующий установщик async ctp3, чтобы увидеть, если это что-то меняет.

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

CS0002 не задокументировано. Интерпретируя сообщение об ошибке, я бы сказал, что компилятор пытается показать вам сообщение об ошибке компиляции, но терпит неудачу, когда пытается получить текст сообщения. Немного странно, что в его ресурсах нет строковой таблицы, не знаю, откуда она взялась.

Ну, что-то не так. Ваша идея обновить версию .NET Framework является твердой, что также обновит csc.exe. Должно быть достаточно хорошим, чтобы исправить любой урон.

0 голосов
/ 25 марта 2012

Хорошо, основываясь на моем собственном опыте попыток решить проблему, а также на ответе Ханса и нескольких других обсуждениях, которые я выкопал во время поиска в Google, я предполагаю, что единственный способ вызвать эту ошибку - это иметь проблемус текущим состоянием установки .Net Framework.По сути, несоответствие между компилятором и некоторым другим используемым им ресурсом означает, что когда компилятор обнаруживает ошибку, он пытается извлечь сообщение об ошибке из ссылочного ресурса, но поскольку ресурс не соответствует компиляции компилятора, сообщение об ошибке недоступнои вместо этого компилятор сообщает, что он не может загрузить сообщение (и, следовательно, не может эффективно отобразить правильное сообщение об ошибке).

Следовательно, исправление заключается в исправлении установки .Net Framework, которая может быть выполненапереустановить его, выполнить его восстановление или установить более новую версию (в моем случае это был async ctp, который, хотя и не являлся полным обновлением версии .net framework, был достаточен для исправления любых несовпадающих ссылок на ресурсы, используемых компилятором).1003 *

0 голосов
/ 24 марта 2012

Часто это проблема с обработчиком Entity Framework ваших строк соединения .В файле app.config убедитесь, что имена сборок и ресурсов совпадают с именами.

Вот формат этой конкретной части строки подключения:

Metadata= res://<assemblyFullName>/<resourceName>
...