Многоцелевой проект для включения версий 4.5 и 5 .net

Я экспериментирую с VS2015, чтобы создать какую-то унифицированную среду разработки.

Вся идея состоит в том, чтобы объединить код в единый проект, ориентированный на .net 4.5, aspnet50 и aspnet50core (по возможности).

Один из базовых интерфейсов должен определять:

  • System.Data.IDbConnection для .NET 4.5
  • System.Data.Common.DbConnection для AspNet 5

это как ниже:

public interface
{
#if ASPNET50
    System.Data.Common.DbConnection GetConnection();
#endif

#if NET45
    System.Data.IDbConnection GetConnection();
#endif
}

Я обновил project.json, чтобы он выглядел так:

"frameworks": {
    "net45": {
        "dependencies": {
        }
    }
    "aspnet50": {
        "dependencies": {
            "System.Data.SqlClient": "1.0.0-beta2"
        }
    }
}

Единственный вариант, который у меня есть, - это сослаться на System.Data.Common в .net 4.5 dependencies (но это не сработает, поскольку он не поддерживает .net 4.5).

Если я попытаюсь сослаться на "System.Data": "4.0.0.0" или даже без номера версии, VS2015 не сможет разрешить gac и не распознает ссылку.

Есть надежда?


person Anderson Matos    schedule 29.01.2015    source источник


Ответы (1)


Обычно вы увидите что-то вроде следующей настройки:

  • [Solution]
    • [Project1]
      • [Properties]
      • Проект1.NET45.csproj
      • Проект1.ASPNET5.csproj
      • Class1.cs

В каждом проекте вы определяете символ (например, ASPNET5, NET45). Тогда у каждого будут ссылки на сборки, которые важны для этой сборки. Кроме того, вы можете затем включить общие файлы в оба проекта (и в этих файлах использовать символы, найденные в каждом проекте, для различения кода), но вы также можете разбить реализации для функций, зависящих от версии (например, Class1.NET45.cs, который включен только в проекте NET45)

person Brad Christie    schedule 29.01.2015
comment
Не уверен, как это впишется в проект Asp.Net 5, если вообще войдет. Проблема в том, что VS полностью изменил способ работы с проектами Asp.Net 5 (vNext). - person Anderson Matos; 30.01.2015
comment
@ALMMa - начиная с CTP5 (только что выпущенного), теперь он может работать и со стандартными файлами .csproj, я полагаю - person Erik Funkenbusch; 30.01.2015
comment
Некоторое время поддерживается VS... vNext в VS2014 (это была CTP4). - person Brad Christie; 30.01.2015
comment
@BradChristie, на самом деле это помогло. Это намного сложнее, чем просто добавить соответствующие файлы csproj, потому что проект kproj (vnext) работает совершенно по-другому. Но с некоторой дополнительной работой это стало возможным просто отлично. Теперь приступим к тому, чтобы это поместилось в пакет nuget =) Спасибо! - person Anderson Matos; 30.01.2015
comment
@BradChristie после некоторого тестирования изменение net45 на net451 или net452 работало внутри проекта vNext без необходимости создавать отдельные файлы csproj и все такое. Поскольку сейчас мы используем .net 4.5.1, я думаю, что это будет лучший подход для нашего фреймворка =) - person Anderson Matos; 30.01.2015