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

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

Сразу после того, как мы перешли на визуальную студию 2010 и платформу 4.0, наша сборка соединительных линий начала ломаться с ошибкой "Не удалось загрузить файл или сборку".

Мы определили, что проект 3.5 не может ссылаться на проект 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.0bb3f5f7f11d50a3a\System.Configuration.dll".
Caught the BadImageFormatException, в котором говорится: "Не удалось загрузить файл или сборку
'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' или одна из его зависимостей.
Эта сборка построена с помощью среды выполнения, более новой, чем текущая загруженная среда выполнения и не может быть загружена.". в ResGen (0, 0)

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

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

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

Любые идеи, что может произойти?

Это может быть несоответствие MSBuild, но я просмотрел файлы конфигурации и файлы projs.mbuild, которые использует CruiseControl, и нет ссылок на старые MSBuild; что имеет смысл, так как все они были обновлены, чтобы заставить работать ствол.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Также вы предоставляете путь к 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, чтобы передать аргументы для того, чтобы эти элементы были переопределены для ветки.

Ответ 3

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

Ответ 4

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

<DnaLibrary Name="PROJECTNAME" RuntimeVersion="v4.0">