Почему я получаю Не удалось загрузить файл или ошибку сборки в DLL-библиотеке System.Configuration при использовании framework 4.0? - PullRequest
17 голосов
/ 21 июля 2010

Сразу же после обновления до Visual Studio 2010 и платформы 4.0 наша сборка ствола перестала работать с Не удалось загрузить файл или ошибку сборки.

Мы определили, что проект 3.5 не может 't ссылаться на проект 4.0, иначе мы бы получили эту ошибку, потому что, как говорится в сообщении об ошибке, Эта сборка построена в среде выполнения, более новой, чем текущая загруженная среда выполнения, и не может быть загружена .

С тех пор мы решили эту проблему, и ствол строился нормально.

Однако недавно я выполнил переход и метку, и внезапно эта ошибка снова появилась, когда япопробуйте построить ветку;за исключением ошибки, относящейся к одной из ссылок нашего собственного проекта .net 4.0 на DLL-файл System.Configuration.

Towps.Namespace.MyService.csproj в Core.Dev \ Towps \ Projetcs \ Application \ MyService:
RG0000: не удалось загрузить указанную сборку

"C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Configuration \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll".
Выловлено исключение BadImageFormatException, в котором говорится: «Не удалось загрузить файл или сборку
'C: \ Windows \ Microsoft.Net \ Assembly \ GAC_MSIL \ System.Configuration \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll' или один изего зависимости.
Эта сборка построена средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена. "в ResGen (0, 0)

Я попытался установить конкретное свойство версии в этой системе. Ссылка DLL конфигурации на true.
В его свойствах видно, что версия времени выполнения v4.0.30319и версия 4.0.0.0.
Путь к ссылке на библиотеку DLL: C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Configuration.dll , что для меня выглядит нормально.

Целевой каркас для файла csproj, который CrusieControl использует MSBuild для сборки, нацелен на каркас 4.0.Опять же, все в порядке.

Он встроен в IDE для магистрали и ветви.Круиз-контроль встроен в багажник.Сборка ветки завершается неудачно, когда CrusieControl пытается собрать.

Есть идеи, что может произойти?

Это может быть несоответствие MSBuild, но я сканировал файлы конфигурации и файлы MSbuild Proj, которые CruiseControl являетсяиспользование и нет ссылок на старые MSBuilds;это имеет смысл, так как все они были обновлены для работы ствола.

Ветвь была просто копией ствола, поэтому мне трудно определить, в чем может быть разница!

Ответы [ 4 ]

4 голосов
/ 29 сентября 2010

Оказывается, что после того, как я разветвился, все файлы .proj в моей директории сборки, которые использует cc.net, вернулись к использованию ToolVerison = "3.5". Я думал, что я зафиксировал все изменения proj ToolsVersion = "4.0" и изменения конфигурации в стволе, из которого я сделал ветку; доказательств нет.

2 голосов
/ 28 сентября 2010

Разница может быть в том, что пути подсказок больше не выстраиваются в новую ветку. Однако в вашем описании нет лога для продолжения. Какие параметры командной строки вы передаете? В ccnet.config, а также во всех других, которые могут войти, если ccnet.config указывает на сценарий сборки, который вызывает msbuild, а не напрямую в файл .sln или .csproj.

Включите /v:d for the msbuild ОБА и затем сравните эталонные разрешения (или порядок сборки и т. Д.) Для этой сборки или других задействованных / около нее.

Также вы предоставляете путь к msbuild на обоих?

msbuild4="C:\WINNT\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"

<msbuild>
    <executable>$(msbuild4)</executable>

в вашем ccnet.config?

Я видел, как он сообщал об исполняемом файле сборки 2.0 во время msbuild4 /tv:3.5:

<Message Text="MSBuildToolsPath:$(MSBuildToolsPath)" />
<Message Text="MSBuildToolsVersion:$(MSBuildToolsVersion)" />

MSBuildToolsPath:C:\WINNT\Microsoft.NET\Framework\v2.0.50727
MSBuildToolsVersion:2.0

так что это не очень полезно.

Я бы хотел видеть блоки конфигурации для ветви и транка.

Я знаю, что у меня были некоторые пути в buildscript, которые не сработали в моей ветке, потому что был жестко закодированный путь, который был бы недопустим для ветви. Мне пришлось настроить ccnet.config, чтобы передать аргументы для тех элементов, которые нужно переопределить для ветви.

0 голосов
/ 16 июня 2014

Немного поздно, я знаю, но если у кого-то еще есть эта проблема, попробуйте добавить RuntimeVersion в ваш файл .dna, если он еще не существует.

<DnaLibrary Name="PROJECTNAME" RuntimeVersion="v4.0">
0 голосов
/ 02 июня 2013

Пожалуйста, проверьте версию .net framework, поддерживаемую вашим клиентом. Например, sharepoint2010 не будет поддерживать dll, построенную на платформе .net 4.0 или выше. Он будет поддерживать только 3,5 или ниже.

...