SmartGantt.Util.SyncPlanLite 7.3.36
SyncPlanLite
개요
- 이 프로젝트는 스마트간트 라이브러리 프로젝트입니다.
- Windows Form 컨트롤 라이브러리(.NET 8)로 생성하였습니다.
속성
- 솔루션 탐색기에서 프로젝트를 선택 후, 마우스 우클릭 > 속성 메뉴에서 확인할 수 있습니다.
빌드 - 조건부 컴파일 기호
- 작업 이동시 디버깅을 위해 조건부 컴파일 기호를 사용하였습니다.
TRACE_ACTIVITY: 작업 이동시 전파되는 정보를 Console에 기록하는 코드가 있습니다.DEBUG_LOG: 작업 이동시 전파되는 정보를 log 파일에 기록하는 코드가 있습니다. 성능을 위해 배포시에는 포함하지 않고, 디버깅을 위해 사용합니다.AUTO_LOGIN: admin 자동 로그인 코드를 실행합니다.LOCAL_CONFIG: 로컬 설정 파일을 사용합니다.
빌드 전 이벤트
빌드 날짜
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="echo %25date%25 %25time%25 > "$(ProjectDir)\Properties\BuildDate.txt"" />
</Target>
- SyncPlanLite 빌드 날짜를 form 제목으로 보여주고 있기 때문에 SyncPlanLite 빌드 전 현재 날짜를 BuildDate.txt에 저장합니다.
- 사용은 SyncPlanLite\Properties\Resources.resx 에 BuildDate.txt파일을 등록해서 코드에서 Properties.Resources.BuildDate 로 사용할 수 있습니다.
버전 업데이트
- 현재 젠킨스 빌드할때 AutoVersioning을 하고 있는데, 이때 솔루션 디렉토리에 version.json 가 생성됩니다. 이 파일의 버전 정보를 이용해서 간트 버전을 설정하도록 수정했습니다.
- csproj에서 간단한 Task를 등록해서 작업하려 했는데, json을 불러올때 Nuget 패키지(Newtonsoft.Json)을 사용해야 해서 SyncPlanLiteBuildTask 프로젝트를 생성하여 Task dll을 만들어 사용하도록 구현했습니다.
- 입력받은 path에 있는 json 파일에서 버전을 불러와서, Version String을 리턴합니다.
[Required] public string JsonFilePath { get; set; } [Output] public string VersionString { get; set; } public override bool Execute() { try { string jsonText = File.ReadAllText(JsonFilePath); var jsonObject = JObject.Parse(jsonText); VersionString = $"{jsonObject["major"]}.{jsonObject["minor"]}.{jsonObject["patch"]}"; Log.LogMessage(MessageImportance.High, VersionString); return true; } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } } - 사용시에는 csproj에서 Task를 등록하고, 결과 버전값으로 AssemblyVersion, FileVersion, Version, PackageVersion을 설정합니다.
<UsingTask TaskName="VersionTask" AssemblyFile="..\SyncPlanLite\lib\SyncPlanLiteBuildTask.dll" /> <Target Name="SetVersion" BeforeTargets="BeforeBuild" Condition=" '$(Configuration)' == 'Release' "> <VersionTask JsonFilePath="..\version.json"> <Output TaskParameter="VersionString" PropertyName="AssemblyVersion" /> </VersionTask> <PropertyGroup> <AssemblyVersion>$(AssemblyVersion)</AssemblyVersion> <FileVersion>$(AssemblyVersion)</FileVersion> <Version>$(AssemblyVersion)</Version> <PackageVersion>$(AssemblyVersion)</PackageVersion> </PropertyGroup> </Target>
NuGet 패키지
- Costura.Fody : 참조 dll을 포함하는 단일 dll파일로 만들어주는 패키지입니다.
- devExpress.Win.Design : DevExpress 컨트롤을 사용하기 위한 패키지입니다.
- HardwareInformation : 하드웨어 정보를 가져오는 패키지입니다. 오류보고시 사용합니다.
- IKVM : java 클래스를 사용할 수 있도록 해주는 패키지입니다. 웹 연결하지 않는 경우, 로그인 하기 위해 사용합니다.
- Microsoft.EntityFrameworkCore : Entity Framework Core를 사용하기 위한 패키지입니다.
- Microsoft.EntityFrameworkCore.SqlServer : Entity Framework Core를 사용하여 SQL Server에 연결하기 위한 패키지입니다.
- Microsoft.EntityFrameworkCore.Tools : Entity Framework Core를 사용하여 데이터베이스를 업데이트하기 위한 패키지입니다.
- Microsoft.Extensions.Configuration
- Oracle.EntityFrameworkCore : Entity Framework Core를 사용하여 Oracle에 연결하기 위한 패키지입니다.
- Pomelo.EntityFrameworkCore.MySql : Entity Framework Core를 사용하여 MySQL에 연결하기 위한 패키지입니다.
- Microsoft.Web.WebView2 : WebView2 컨트롤을 사용하기 위한 패키지입니다. 하이브리드뷰 기능을 구현하기 위해 사용합니다.
- Newtonsoft.Json : json 데이터를 다루기 위한 패키지입니다.
- NLog : log를 기록하는 패키지입니다.
- RestSharp : REST API를 사용하기 위한 패키지입니다.
- WebSocketSharp : 엔진 서버 연결시 사용합니다.
- YamlDotNet : configuration yaml 파일을 읽어오기 위해 사용합니다.
Model 수정
- Model은 자동 생성되는 코드이기 때문에 직접 수정하지 않고 자동 생성하는 것을 권장하지만, CodeFirst 방식에서 DB로 업데이트하는 방법은 없기 때문에 약간의 수정이 필요합니다.
컬럼 추가
- model > codefirst 폴더에서 컬럼이 추가된 테이블
cm_scenario.cs파일을 열어 추가된 컬럼segment를 정의합니다.
public partial class cm_scenario
{
...
[StringLength(40)]
public string segment { get; set; }
...
}
- model > codefirst 폴더에서
SyncPlanContext클래스의OnModelCreating()메서드에 다음과 같이 추가한다.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<cm_scenario>()
.Property(e => e.segment)
.IsUnicode(false);
}
테이블 추가
- SmartGantt 프로젝트의 model - codefirst 폴더에
ADO.NET 엔터티 데이터 모델을 추가합니다.

- 모델 콘텐츠로
데이터베이스의 Code First를 선택합니다.

- 추가하고자 하는 테이블이 위치한 DB를 선택하거나, 추가되어 있지 않다면
새 연결버튼을 눌러 DB를 설정하여 줍니다. 중요 문자열 포함, App.config 연결 설정 저장 체크 해제한 후 다음 버튼을 선택합니다.

- 추가하고자 하는 테이블을 체크한 후 마침 버튼을 선택하면 테이블명과 같은 클래스 파일과, CustomContext 클래스 파일이 자동 생성됩니다.

- 자동생성된 context 파일에
OnModelCreating()메서드 내용을 복사하여SyncPlanContext.cs의 메서드에 붙여넣고, 테이블 DBSet 변수도 복사합니다.
public SyncPlanContext(string name)
: base($"name={name}Model")
{
public virtual DbSet<cm_menu> cm_menu { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<cm_menu>>()
.Property(e => e.id)
.IsUnicode(false);
...
}
}
- CustomContext 클래스 파일은 삭제합니다.
- not null 컬럼이지만 empty string을 저장해야 하는 컬럼인 경우 다음과 같이 수정합니다.
public partial class spp_operation_schedule
{
[Required(AllowEmptyStrings = true)] //필수 컬럼이지만 empty string 허용
[StringLength(40)]
public string resource_code { get; set; }
}
Showing the top 20 packages that depend on SmartGantt.Util.SyncPlanLite.
| Packages | Downloads |
|---|---|
|
SmartGantt.Util.SmartGanttLauncher
SmartGantt 업데이트 폼
|
0 |
.NET 8.0
- SmartGantt.Util.SmartGanttConfiguration (>= 1.0.0)
- DevExpress.Win.Design (>= 23.2.4)
- HardwareInformation (>= 5.0.2)
- Microsoft.EntityFrameworkCore (>= 8.0.3)
- Microsoft.EntityFrameworkCore.SqlServer (>= 8.0.3)
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Web.WebView2 (>= 1.0.2365.46)
- NLog.Extensions.Logging (>= 5.3.8)
- Newtonsoft.Json (>= 13.0.3)
- Oracle.EntityFrameworkCore (>= 8.21.121)
- Pomelo.EntityFrameworkCore.MySql (>= 8.0.1)
- RestSharp (>= 110.2.0)
- WebSocketSharp-netstandard (>= 1.0.1)
- YamlDotNet (>= 15.1.2)
| Version | Downloads | Last updated |
|---|---|---|
| 7.4.65 | 1 | 12/22/2025 |
| 7.4.64 | 0 | 12/20/2025 |
| 7.4.63 | 0 | 12/16/2025 |
| 7.4.62 | 0 | 12/14/2025 |
| 7.4.61 | 1 | 12/12/2025 |
| 7.4.60 | 2 | 12/12/2025 |
| 7.4.59 | 2 | 12/11/2025 |
| 7.4.58 | 1 | 12/11/2025 |
| 7.4.57 | 2 | 12/11/2025 |
| 7.4.56 | 0 | 12/10/2025 |
| 7.4.55 | 2 | 12/07/2025 |
| 7.4.54 | 0 | 12/06/2025 |
| 7.4.53 | 0 | 12/04/2025 |
| 7.4.52 | 3 | 11/26/2025 |
| 7.4.51 | 2 | 11/26/2025 |
| 7.4.50 | 3 | 11/26/2025 |
| 7.4.49 | 0 | 11/26/2025 |
| 7.4.48 | 0 | 11/18/2025 |
| 7.4.47 | 0 | 11/13/2025 |
| 7.4.46 | 1 | 11/10/2025 |
| 7.4.45 | 0 | 11/05/2025 |
| 7.4.44 | 2 | 11/01/2025 |
| 7.4.43 | 3 | 10/30/2025 |
| 7.4.42 | 1 | 10/25/2025 |
| 7.4.41 | 2 | 10/22/2025 |
| 7.4.40 | 3 | 10/21/2025 |
| 7.4.39 | 3 | 10/21/2025 |
| 7.4.38 | 2 | 10/21/2025 |
| 7.4.37 | 4 | 10/15/2025 |
| 7.4.36 | 3 | 10/15/2025 |
| 7.4.35 | 2 | 10/11/2025 |
| 7.4.34 | 2 | 09/30/2025 |
| 7.4.33 | 2 | 09/27/2025 |
| 7.4.32 | 3 | 09/20/2025 |
| 7.4.31 | 4 | 09/08/2025 |
| 7.4.30 | 3 | 09/07/2025 |
| 7.4.29 | 3 | 09/06/2025 |
| 7.4.28 | 5 | 08/30/2025 |
| 7.4.27 | 3 | 08/26/2025 |
| 7.4.26 | 3 | 08/21/2025 |
| 7.4.25 | 8 | 08/18/2025 |
| 7.4.24 | 4 | 08/17/2025 |
| 7.4.23 | 3 | 08/16/2025 |
| 7.4.22 | 5 | 08/09/2025 |
| 7.4.21 | 5 | 08/02/2025 |
| 7.4.20 | 4 | 07/28/2025 |
| 7.4.19 | 9 | 07/24/2025 |
| 7.4.18 | 7 | 07/23/2025 |
| 7.4.17 | 6 | 07/22/2025 |
| 7.4.16 | 5 | 07/18/2025 |
| 7.4.15 | 5 | 07/12/2025 |
| 7.4.14 | 6 | 07/05/2025 |
| 7.4.13 | 8 | 07/03/2025 |
| 7.4.12 | 7 | 07/02/2025 |
| 7.4.11 | 5 | 07/01/2025 |
| 7.4.10 | 5 | 06/30/2025 |
| 7.4.9 | 7 | 06/24/2025 |
| 7.4.8 | 6 | 06/21/2025 |
| 7.4.7 | 6 | 06/16/2025 |
| 7.4.6 | 8 | 06/11/2025 |
| 7.4.5 | 6 | 06/07/2025 |
| 7.4.4 | 7 | 05/29/2025 |
| 7.4.3 | 7 | 05/25/2025 |
| 7.4.2 | 8 | 05/22/2025 |
| 7.4.1 | 7 | 05/13/2025 |
| 7.3.103 | 9 | 05/12/2025 |
| 7.3.102 | 7 | 05/12/2025 |
| 7.3.101 | 7 | 05/03/2025 |
| 7.3.99 | 7 | 04/25/2025 |
| 7.3.98 | 7 | 04/10/2025 |
| 7.3.97 | 11 | 04/06/2025 |
| 7.3.96 | 8 | 04/05/2025 |
| 7.3.95 | 9 | 03/28/2025 |
| 7.3.94 | 8 | 03/27/2025 |
| 7.3.93 | 7 | 03/25/2025 |
| 7.3.92 | 6 | 03/22/2025 |
| 7.3.91 | 6 | 03/17/2025 |
| 7.3.90 | 6 | 03/15/2025 |
| 7.3.89 | 7 | 03/07/2025 |
| 7.3.88 | 8 | 03/06/2025 |
| 7.3.87 | 6 | 03/06/2025 |
| 7.3.86 | 6 | 03/05/2025 |
| 7.3.85 | 7 | 03/05/2025 |
| 7.3.84 | 7 | 03/04/2025 |
| 7.3.83 | 9 | 03/01/2025 |
| 7.3.82 | 9 | 02/22/2025 |
| 7.3.81 | 8 | 02/18/2025 |
| 7.3.80 | 8 | 02/15/2025 |
| 7.3.79 | 7 | 02/04/2025 |
| 7.3.78 | 7 | 01/23/2025 |
| 7.3.77 | 7 | 01/18/2025 |
| 7.3.76 | 11 | 01/11/2025 |
| 7.3.75 | 7 | 12/28/2024 |
| 7.3.74 | 9 | 12/14/2024 |
| 7.3.73 | 8 | 12/05/2024 |
| 7.3.72 | 9 | 12/04/2024 |
| 7.3.71 | 8 | 12/03/2024 |
| 7.3.70 | 9 | 11/24/2024 |
| 7.3.69 | 7 | 11/23/2024 |
| 7.3.68 | 49 | 11/16/2024 |
| 7.3.67 | 7 | 11/10/2024 |
| 7.3.66 | 7 | 11/09/2024 |
| 7.3.65 | 8 | 10/31/2024 |
| 7.3.64 | 7 | 10/26/2024 |
| 7.3.63 | 8 | 10/24/2024 |
| 7.3.62 | 9 | 10/23/2024 |
| 7.3.61 | 8 | 10/22/2024 |
| 7.3.60 | 7 | 10/21/2024 |
| 7.3.59 | 9 | 10/21/2024 |
| 7.3.58 | 9 | 10/20/2024 |
| 7.3.57 | 11 | 10/19/2024 |
| 7.3.56 | 9 | 10/16/2024 |
| 7.3.55 | 9 | 10/14/2024 |
| 7.3.54 | 7 | 10/10/2024 |
| 7.3.53 | 10 | 10/08/2024 |
| 7.3.52 | 8 | 10/08/2024 |
| 7.3.51 | 7 | 10/07/2024 |
| 7.3.50 | 10 | 10/07/2024 |
| 7.3.49 | 8 | 10/05/2024 |
| 7.3.48 | 7 | 09/28/2024 |
| 7.3.47 | 7 | 09/23/2024 |
| 7.3.46 | 7 | 09/22/2024 |
| 7.3.45 | 7 | 09/11/2024 |
| 7.3.44 | 10 | 09/11/2024 |
| 7.3.43 | 8 | 09/10/2024 |
| 7.3.42 | 8 | 09/10/2024 |
| 7.3.41 | 7 | 09/09/2024 |
| 7.3.40 | 7 | 09/07/2024 |
| 7.3.39 | 8 | 08/31/2024 |
| 7.3.38 | 7 | 08/25/2024 |
| 7.3.37 | 8 | 08/20/2024 |
| 7.3.36 | 8 | 08/17/2024 |
| 7.3.35 | 9 | 08/16/2024 |
| 7.3.34 | 8 | 08/16/2024 |
| 7.3.33 | 7 | 08/15/2024 |
| 7.3.32 | 8 | 08/14/2024 |
| 7.3.31 | 8 | 08/14/2024 |
| 7.3.30 | 9 | 08/13/2024 |
| 7.3.29 | 8 | 08/12/2024 |
| 7.3.28 | 8 | 08/08/2024 |
| 7.3.27 | 7 | 08/06/2024 |
| 7.3.26 | 7 | 08/05/2024 |
| 7.3.25 | 8 | 08/04/2024 |
| 7.3.24 | 8 | 07/31/2024 |
| 7.3.24-dev | 8 | 07/31/2024 |
| 7.3.23 | 7 | 07/26/2024 |
| 7.3.22 | 8 | 07/25/2024 |
| 7.3.21 | 9 | 07/23/2024 |
| 7.3.20 | 7 | 07/23/2024 |
| 7.3.19 | 7 | 07/18/2024 |
| 7.3.18 | 8 | 07/13/2024 |
| 7.3.17 | 8 | 07/10/2024 |
| 7.3.16 | 7 | 07/09/2024 |
| 7.3.15 | 7 | 07/08/2024 |
| 7.3.14 | 7 | 07/04/2024 |
| 7.3.13 | 9 | 07/04/2024 |
| 7.3.12 | 8 | 07/03/2024 |
| 7.3.11 | 8 | 07/03/2024 |
| 7.3.10 | 8 | 07/02/2024 |
| 7.3.9 | 7 | 07/02/2024 |
| 7.3.8 | 7 | 07/01/2024 |
| 7.3.7 | 7 | 06/30/2024 |
| 7.3.6 | 12 | 06/29/2024 |