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

Каковы мои варианты совместного использования кода между проектами DNX/ASP.NET 5 (project.json/xproj) и другими проектами С# (csproj) в рамках одного решения?

Сценарий

Я экспериментирую с Visual Studio 2015 RC, особенно глядя на переход на новую структуру ASP.NET 5, структуру проекта и новый DNX, который запускает приложения ASP.NET 5.

У моего работодателя есть много существующих решений, ориентированных на .NET Framework 4.5.2. В наших существующих решениях Visual Studio у нас могут быть следующие проекты:

[Solution] Sample.sln
    [Folder] src
        [Project] ClassLibrary.csproj
        [Project] WindowsService.csproj
        [Project] WebApplication.csproj
    [Folder] test
        [Project] ClassLibrary.UnitTests.csproj
        ...

В этом случае ClassLibrary.csproj - это библиотека классов С#, содержащая общий код. Это зависимость /, на которую ссылаются как WindowsService.csproj, так и WebApplication.csproj.

Мы специально не пытаемся настроить .NET Core, dnxcore50. На этом этапе мы счастливы ориентироваться на .NET Framework, dnx451. Однако мы абсолютно пытаемся использовать новые возможности ASP.NET 5 и соответствующую структуру проекта.

Ниже приведены некоторые параметры, о которых я думал, но у обоих есть проблемы.

Вариант 1

Когда мы заменим проект WebApplication.csproj выше новым проектом ASP.NET 5 DNX WebApplication-dnx, мы можем по-прежнему ссылаться на ClassLibrary.csproj как из этого нового проекта DNX, так и из существующего проекта WindowsService.csproj. Однако возникают некоторые проблемы:

  • Этот подход означает, что любые изменения кода в ClassLibrary.csproj требуют, чтобы перестройка была видимой в запуске WebApplication-dnx. Это не удивительно, но мы не получаем полной выгоды от компиляции с источника для WebApplication-dnx.

  • Мы не можем легко нацелить другие фреймворки, например. dnxcore50. Как и выше, на данном этапе это не является конкретной целью.

Вариант 2

Если мы заменим ClassLibrary.csproj на проект библиотеки классов DNX ^ ClassLibrary-dnx, то проблемы в опции 1 не применяются. Казалось бы, этот подход будет более соответствовать тому, как будет выполняться среда выполнения .NET и связанные с ней технологии, такие как ASP.NET, в будущем.

Однако я не могу найти способ ссылки ClassLibrary-dnx на WindowsService.csproj. Если этот подход жизнеспособен, я полагаю, что решение имеет какое-то отношение к опции уровня проекта для Produce outputs on build, а затем ссылается на .nupkg или, возможно, даже на .dll, который создается во время сборки. Однако я не вижу чистого способа достижения этого с помощью инструмента.

^ Проекты библиотеки классов DNX называются Class Library (Package) в VS 2015 RC. Этот тип проекта ранее назывался ASP.NET Class Library в CTP.

Резюме

Основываясь на приведенной выше информации, я ищу:

  • Некоторые отзывы о моих сценариях и проблемах.

  • Предложения по другим параметрам, о которых я не думал.

  • Возможно, указывается, какой подход следует использовать для продвижения вперед.

4b9b3361

Ответ 1

Посмотрите, что делает EntityFramework.

Они нацелены на 3 TFM: net45,.NETPortable, Version = v4.5, Profile = Profile7, frameworkAssemblies, и они имеют как csproj, так и xproj в той же папке.

В принципе, для каждого проекта у вас есть два файла проекта.

Однако я не могу найти способ ссылки на ClassLibrary-dnx из WindowsService.csproj.

К сожалению, это пока невозможно. Вы можете ссылаться только на csproj из xproj, а не наоборот. У вас есть две альтернативы: (1) имеют как xproj, так и csproj, подобные EF, или (2) ссылаются на пакет NuGet из csproj.

Если вы хотите сделать альтернативу (2), вы можете установить выход xproj в папку и добавить это как канал NuGet.