Как сослаться на проект ASP.NET 5 из другого проекта?

У меня есть проект веб-приложения, созданный из шаблонов предварительного просмотра ASP.NET 5 в VS2015. Он работает на dnx 1.0.0-beta7, но я использую полную инфраструктуру .NET, а не .NET Core.

В том же решении у меня есть проект библиотеки классов NUnit, но при попытке добавить сюда веб-проект в качестве ссылки Visual Studio говорит: «Не удалось добавить ссылку на '...'».

Есть ли обходной путь для этого? Или какой предпочтительный способ модульного тестирования приложений ASP.NET vNext?


person metalheart    schedule 01.10.2015    source источник


Ответы (2)


Самый простой способ — убедиться, что ваш веб-проект ASP.NET 5 и тестовый проект имеют общий общий родительский каталог. Например:

Solution
|-- Web
|   |-- project.json
|-- Tests
|   |-- project.json

Таким образом, Roslyn сможет разрешать символы в разных подкаталогах.

Конечно, вам также потребуется добавить зависимость от проекта Tests к проекту Web в файле Tests\project.json:

{
    "webroot": "wwwroot",
    "version": "1.0.0-*",

    "dependencies": {
        "Web": "1.0.0-*"
    },

    "frameworks": {
        "dnx451": { },
        "dnxcore50": { }
    }
}

Если у них не может быть общего родительского каталога, вы всегда можете добавить файл global.json в корневой каталог со списком подкаталогов, содержащих исходный код.

Solution
|-- global.json
|-- Web
|   |-- project.json
|-- Tests
|   |-- project.json

где global.json содержит:

{
    "sources": ["Web", "Tests"]
}

Использование «Добавить ссылку» в Visual Studio 2015

Если при ссылке на проект библиотеки классов из проекта ASP.NET 5 Web с помощью диалогового окна Добавить ссылку в Visual Studio 2015 возникает следующая ошибка:

Не удалось добавить ссылку на ‹ProjectName›.

Это означает, что проект, на который вы пытаетесь сослаться, не является проектом DNX, а является обычным проектом Библиотеки классов. Вы должны убедиться, что библиотека классов является проектом Библиотека классов ASP.NET (пакет), чтобы ссылаться на нее.

person Enrico Campidoglio    schedule 01.10.2015
comment
Спасибо за ваш вклад, Энрико! Вопрос в том, как добавить это в существующую структуру каталогов решений (верхний уровень .sln и WebProject/ для веб-проекта)? Я не могу найти подходящий тип проекта, который бы хорошо сочетался с Roslyn, и добавление WebProject.Test/* с project.json внутри вручную в файловую систему, похоже, не дает необходимых результатов... - person metalheart; 01.10.2015
comment
@metalheart Я обновил свой ответ, чтобы ответить на ваш комментарий. - person Enrico Campidoglio; 01.10.2015
comment
Это работает для меня - однако мне нужно сослаться на основной проект из тестового проекта, но спасибо за указание на принцип. - person metalheart; 02.10.2015
comment
Как переключить библиотеку классов на проект библиотеки классов (пакет)? - person ewahner; 11.02.2016
comment
На самом деле это должно быть вам также нужно добавить зависимость от проекта Tests к веб-проекту в Tests\project.json - person Stef Heyenrath; 10.03.2016

Мой опыт был немного другим, поэтому я хотел объяснить «обходной путь», который я нашел.

В частности, когда я пытаюсь добавить «Ссылку на проект» (то есть из одного проекта в другой проект в том же решении), я получаю сообщение об ошибке «Не удалось добавить ссылку на«…»».

Я обнаружил, что если вы добавите ссылку и вместо добавления «ссылки на проект», а вместо этого просматриваете и добавляете DLL (из папки bin проекта, на который ссылаются), она правильно создает необходимую папку в каталоге «wrap» .

Затем вы можете удалить ссылку на DLL, вернуться и добавить «ссылку на проект», и это сработает!

У нас есть коллекция «общих» библиотек, которые мы не хотим копировать/перемещать в ту же структуру папок, что и наши основные папки приложений, поэтому для нас это работает лучше.

person Jason Roos    schedule 01.02.2017