.Net Standard 참조 : https://docs.microsoft.com/en-us/dotnet/standard/net-standard
동일한 기능을 위한 Winform 과 WPF 프로젝트를 동시 개발하는 경우
공통된 기능을 별도 프로젝트로 분리하고자 최근 검색을 좀 해봤는데
.Net Standard 로 불리는…. 먼가(?)가 있더라
예전에는 동일한 소스파일 하나로 바로가기 형태로 공유를 하거나 Portable Library 를 사용했던거 같은데 지금은 저게 대세(?) 인가….
암튼 .Net Standard 를 사용하면서 일부 내용을 정리해보자
Target framework moniker (TFM) 참조 : Target frameworks in SDK-style projects – .NET | Microsoft Docs
프로젝트 파일을 편집해서 대상 플랫폼들을 추가합니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net40</TargetFrameworks>
</PropertyGroup>
<!-- 조건부 컴파일 기호 재정의 -->
<PropertyGroup Condition=" '$(TargetFramework)' == 'net40' ">
<DefineConstants>NET40</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<DefineConstants>NETSTD20</DefineConstants>
</PropertyGroup>
<!-- 타 플랫폼 예시 -->
<PropertyGroup Condition="$(TargetFramework.StartsWith('MonoAndroid'))">
<DefineConstants>ANDROID</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.StartsWith('Xamarin.iOS'))">
<DefineConstants>IOS</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.StartsWith('uap'))">
<DefineConstants>UWP</DefineConstants>
</PropertyGroup>
<!-- 추가로 참조된 어셈블리 -->
<ItemGroup>
<Reference Include="PresentationCore">
<HintPath>..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\PresentationCore.dll</HintPath>
</Reference>
<Reference Include="System.Xaml">
<HintPath>..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
다음과 같이 소스 코드에서 컴파일 시점에 분기 처리 합니다.
조건부 컴파일 기호를 재정의 해서 글자 수를 줄이고 코드에서는 다음과 같이 사용한다. 얼마나 길다고…. 할 수 있지만 재정의가 가능 하다는게 중요하네
#if NET40
private string Test = "";
#elif NETSTD20
private string Test = "";
#else
#endif
0 Comments