Почему я получаю исключение FileNotFound при ссылке на другой проект из того же решения?

Я учусь использовать NUnit. У меня есть основной проект в его решении, и я создал отдельный проект в том же решении, которое будет содержать мои модульные тесты со своим собственным пространством имен. Из этого проекта я добавляю ссылку на основной проект и добавляю

using MainProjectNamespace;

к вершине этого.

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

TestLibrary.Test.TestMainProject: System.IO.FileNotFoundException: не удалось загрузить файл или сборку «WpfApplication2, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null» или одна из ее зависимостей. Система не может найти указанный файл.

Почему я получаю это исключение?

РЕДАКТИРОВАТЬ:

Теперь, когда я пытаюсь загрузить сборку в NUnit, она даже не загружается (поэтому я даже не могу запустить тесты)

Это исключение, которое приходит, и трассировка стека:

System.IO.DirectoryNotFoundException: не удалось найти часть пути «ДЛИННЫЙ ПУТЬ ЗДЕСЬ Я НЕ ХОЧУ ВВОДИТЬ»

System.IO.DirectoryNotFoundException...

Server stack trace: 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.Directory.SetCurrentDirectory(String path)
    at NUnit.Core.DirectorySwapper..ctor(String directoryName)
    at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
    at NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
    at NUnit.Core.SimpleTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.RemoteTestRunner.Load(TestPackage package)
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at NUnit.Core.TestRunner.Load(TestPackage package)
    at NUnit.Util.TestDomain.Load(TestPackage package)
    at NUnit.Util.TestLoader.LoadTest(String testName)

EDIT2: указанный выше путь явно НАХОДИТСЯ на моем жестком диске.

EDIT3: я только что переключился с Debug на Release на NUnit и загрузил dll из папки выпуска TestingLibrary... И она загрузилась! 1 из 3 тестов, специфичных для пространства имен, сработал. Собираюсь куда-то, я.

РЕДАКТИРОВАТЬ4: Хорошо... Теперь я могу запустить тесты, но я вернулся к исходной ошибке. IT не находит сборку для основного проекта


person Alex Baranosky    schedule 08.02.2009    source источник
comment
У вас возникают проблемы с относительными и абсолютными путями?   -  person BobbyShaftoe    schedule 08.02.2009


Ответы (4)


Компилятор удаляет все неиспользуемые ссылки и не развертывает dll без необходимости. using (сам по себе) не считается использованием. Либо отметьте dll для развертывания с помощью параметра «Копировать в выходной каталог», либо добавьте некоторый код, который действительно использует типы, объявленные в dll.

person Marc Gravell    schedule 08.02.2009
comment
У меня есть код, который создает новый экземпляр класса и делает несколько вещей. Но ошибка все равно вылазит. - person Alex Baranosky; 08.02.2009
comment
Также установлено свойство Copy Local, указывающее, будет ли ссылка копироваться в выходной каталог. - person Alex Baranosky; 08.02.2009
comment
Марк, проверьте свои новые комментарии. Я не могу заставить эту штуку работать, а у тебя всегда есть ответы на все вопросы... - person Alex Baranosky; 08.02.2009
comment
Не всегда, я не - извините. Единственная другая мысль, которая у меня есть на данный момент, это что-то связанное с SNK... есть что-нибудь громкое? - person Marc Gravell; 08.02.2009
comment
в классе Test большинство ссылок имеют строгое имя, единственная ссылка, которая не является ссылкой на основной проект - person Alex Baranosky; 08.02.2009

Вы переименовали имя выходной сборки ИЛИ пространство имен в исходном проекте?

Похоже, ваш исходный файл — «WPFApplication1», и я предполагаю, что вы могли изменить тип вывода с dll на exe?

person shahkalpeshp    schedule 08.02.2009
comment
Я переименовал несколько вещей, когда создавал исходный проект, возможно, это что-то напутало? Intellisense нового проекта может определить типы моих пользовательских объектов класса, но по какой-то причине это вызывает проблемы... - person Alex Baranosky; 08.02.2009
comment
Я точно переименовал пространство имен. - person Alex Baranosky; 08.02.2009
comment
ХОРОШО. Удалите ссылку на сборку из ссылок (она может отображать ссылку с восклицательным знаком). Создайте исходный проект и добавьте ссылку на него в тестовый проект. - person shahkalpeshp; 08.02.2009
comment
вы имеете в виду удалить ссылку на исходный проект из проекта тестирования? - person Alex Baranosky; 08.02.2009
comment
Я сделал вышеописанное и перестроил исходный проект, затем добавил ссылку на тестовый проект и также перестроил его, все еще получая ту же ошибку. - person Alex Baranosky; 08.02.2009
comment
Создайте новый тестовый проект. Думаю, это сэкономит вам немного времени. - person shahkalpeshp; 08.02.2009
comment
ни одна из деталей исходного проекта не изменилась с момента создания проекта Testing - person Alex Baranosky; 08.02.2009
comment
Я только что сделал новый проект, и теперь, когда я загружаю dll в NUnit, он даже не позволяет мне его загрузить. Это дает мне ту же ошибку, что и при запуске тестов, за исключением того, что я получаю ее, когда NUnit пытается загрузить сборку. - person Alex Baranosky; 08.02.2009
comment
подождите, приведенное выше утверждение ложно, на самом деле я получаю ПОХОЖИЕ сообщения, но на этот раз он не может найти dll фреймворка NUnit. - person Alex Baranosky; 08.02.2009
comment
Я предлагаю закрыть vs.net. Откройте решение с исходным проектом. Добавьте новый проект, добавьте ссылку на nunit.framework.dll и ваш проект. Добавьте исходный файл для тестирования и сборки решения. - person shahkalpeshp; 08.02.2009

У меня была та же проблема, и мне помог ответ RKitsons.

По сути, я скопировал все dll, от которых зависит мой проект, а также nunit.framework.dll в тот же каталог... obj/debug/ Это один из способов сделать это.

Элегантный метод состоит в том, чтобы изменить конфигурацию проекта в Visual Studio на вкладке «Сборка» в режиме выпуска, и, если проект настроен правильно, следует скопировать все зависимые dll в соответствующий «выходной» или «выпускной» каталог.

person Gregor    schedule 13.05.2012

Похоже, что одна из сборок, на которые вы ссылаетесь в своем приложении, зависит от другой сборки, которой нет в папке bin.

person RKitson    schedule 10.02.2009
comment
Спасибо за ваш ответ. Я только что проверил свою папку bin, и обе подпапки отладки и выпуска содержат все файлы, от которых зависит моя TestLibrary. Например, WpfApplication2.exe... Любые другие идеи? - person Alex Baranosky; 10.02.2009
comment
Вы пытаетесь использовать консольное приложение NUnit? Если да, то пробовали ли вы TestDriven.net? Я получил аналогичную ошибку несколько недель назад, но это было потому, что я использовал несколько разных проектов с открытым исходным кодом, которые все зависели от другого проекта, но разных версий. - person RKitson; 11.02.2009
comment
Работает ли TestDriven.NET с VS Express? Я не вижу Run Tests - person Alex Baranosky; 11.02.2009