2011-02-02 2 views
1

У меня есть комплексное решение (разработанное под Windows, развернутое под GNU \ Linux) с несколькими проектными модулями с использованием NUnit 2.9.3.Не удается построить проект тестирования NUnit под Mono и Linux

Вот справка из проекта:

<Reference Include="nunit.framework, Version=2.9.3.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\..\Program Files\NUnit 2.9.3\bin\net-4.0\nunit.framework.dll</HintPath> 
</Reference> 

я скачал и построил NUnit 2.9.3 из source:

$ xbuild solutions/MonoDevelop/NUnit.Framework.sln /p:Configuration=Release 

и устанавливается в GAC:

$ gacutil /i solutions/MonoDevelop/bin/Release/nunit.framework.dll 

$ gacutil /l nunit.framework 
The following assemblies are installed into the GAC: 
nunit.framework, Version=2.9.3.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 
Number of items = 1 

и удалил локальный mono nunit установка:

$ rm /usr/lib/mono/2.0/nunit* 
$ rm /usr/lib/mono/4.0/nunit* 

, но когда я пытаюсь построить мое решение:

$ xbuild MySolution.sln | grep error 

: error CS0006: Metadata file `/usr/lib/mono/2.0/nunit.framework.dll' could not be found 

Что делать я неправильно?

ответ

4

Инструменты сборки обычно не разрешают сборки из GAC (кроме, возможно, в качестве крайней меры). В .NET они «собирают папки», зарегистрированные в реестре. В Mono они используют «pkgconfig». Возможно, вы удалили сборки nunit, но вы не удалили или не зафиксировали файл pkgconfig («pc»), который сообщает xbuild и MonoDevelop, где найти dll.

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

В этом случае я предлагаю вам создать файл pc для ваших новых сборок nunit и поместить его в каталог/usr/local/lib/pkgconfig (/ usr/local - это префикс для установки материалов, которые вы создаете из source), или поместить его в другое место и включить в другое место в переменную среды PKG_CONFIG_PATH.

Смотрите также:

И для некоторого общего фона по настройке среды Mono, см:

+0

Я удалил '/ USR/Lib/pkg-config/моно-nunit.pc', но это не помогло – abatishchev

+1

Какая версия моно вы используете? Попробуйте удалить - ~/.config/xbuild/pkgconfig-cache-2.xml. Если вы все еще получите ошибку, запустите xbuild с помощью «/ v: diag», которая даст вам информацию о том, почему xbuild выбрал этот конкретный путь для разрешения ссылки nunit. – radical

+0

Спасибо большое, Майкл! Очистка 'pkgconfig-cache-2.xml'. – abatishchev

2

Я попытаюсь скопировать NUnit 2.9.3 в папку с исходным файлом, такую ​​как (папка с решением) \ lib. Затем добавьте эту ссылку локально и убедитесь, что тег соответствует этому локальному пути.

Когда это настроено, я думаю, что xbuild должен использовать эту локальную копию напрямую, а не читать GAC или другие предварительно сконфигурированные пути. Если нет, я сообщу об ошибке команде Mono.

2

Опция/упак из моно компилятор работал нормально для меня ...

dmcs test.cs /r:System.Configuration.dll /r:System.dll /pkg:nunit 

FWIW, я установил NUnit с помощью APT-получить менеджер пакетов (на Ubuntu) ...

sudo apt-get install nunit 
+1

Эквивалент '/ pkg' в Unix выглядит как' -pkg' (а не '--pkg'). +1 –

Смежные вопросы