При написании библиотеки, код которой валиден как для .NET Framework
, так и для .NET Core
, приходится создавать два разных проекта со своими зависимостями и практически одинаковым кодом.
Текущее положение дел (необходимость отдельно обновлять код соседнего проекта и отдельно его собирать) меня не очень устраивает. И пусть я написал скрипт для автоматизации этого, знаю, что есть решение получше. Можно как-то модифицировать сам проект в Visual Studio
для достижения таковых целей:
NETCORE
, NET
(по
типу DEBUG
), дабы в некоторых местах менять платформо-зависимый кодКак лучше организовать решение поставленной задачи?
При использовании SDK based формата для файлов проекта (.csproj
) можно указать несколько целевых платформ для сборки в элементе TargetFrameworks
. Также можно использовать атрибут Condition
для условного указания зависимостей.
Test.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>Latest</LangVersion>
<OutputType>Exe</OutputType>
<TargetFrameworks>
netcoreapp2.1;
net472;
</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="$(Platform) == 'AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup Condition="$(TargetFramework) == 'netcoreapp2.1'">
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'net472'">
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
</ItemGroup>
</Project>
Test.cs
:
using System;
namespace Test {
class Program {
static void Main() {
Console.WriteLine("Hello World!");
#if NETFRAMEWORK
Console.WriteLine(".NET Framework");
Console.WriteLine((System.Numerics.Vector<byte>)new System.Numerics.Vector<int>(42));
#elif NETCOREAPP
Console.WriteLine(".NET Core");
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(new { a = 1, b = 2 }));
#else
Console.WriteLine("Unknown");
#endif
}
}
}
Gist
отдельно обновлять код соседнего проекта
у Вас две копии кода?
Положите cs файлы в третье место и добавьте их в оба проекта, используя опцию "Add As Link" в окне "Add Existing File".
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Изучаю внедрение зависимостей, появился вопросМожет ли быть такое что два класса зависят друг от друга как в примере ниже
Как в MindDecider в скрипте подключить свою библиотеку dll?