DotNet CLI 를 사용 하여 사용자 정의 WPF 프로젝트 템 플 릿 만 들 기
11221 단어 DotNetCLIWPF 프로젝트 템 플 릿
묘사 하 다.
DotNetCore 3.0 버 전의 SDK 를 설치 하면 DotNetCore 기반 WPF 프로젝트 템 플 릿 을 만 들 수 있 습 니 다.다음 CLI 를 통 해 프로젝트 를 편리 하고 빠르게 만 들 고 실행 할 수 있 습 니 다.
dotnet new wpf -n WpfApp
cd WpfApp
dotnet restore
dotnet run
WPF 개발 을 한 친구 들 은 이 프로젝트 템 플 릿 이 우리 의 기대 에 부합 되 지 않 을 것 이라는 것 을 잘 알 고 있 습 니 다.우 리 는 우리 의 프로젝트 템 플 릿 이 MVVM 의 기본 코드 세그먼트 에 가입 하고 DotNetCore 와 긴밀 하 게 합작 할 수 있 기 를 바 랍 니 다.그러면 더욱 편리 하지 않 겠 습 니까?그래서 본 고 는 MVVM 의 일종 인 MvvmLightStd 10 을 사용 하여 여러분 에 게 우리 의 이상 적 인 프로젝트 템 플 릿 을 만 드 는 방법 을 가 르 칩 니 다.조작 하 다.
우선,우 리 는 DotNetCore 3.0 을 기반 으로 원본 WPF 프로젝트 템 플 릿 을 만 든 다음 에 다음 과 같은 라 이브 러 리 를 참조 합 니 다.
dotnet add package Microsoft.Extensions.DependencyInjection
dotnet add package MvvmLightLibsStd10
주:우 리 는 DotNetCore 를 사 용 했 기 때문에 가능 한 한 우리 가 설치 한 제3자 패 키 지 는.NET Standard 방식 을 바탕 으로 이 루어 집 니 다.그리고 이 프로젝트 를 수정 해서 우리 가 앞으로 만 들 고 싶 은 프로젝트 템 플 릿 의 모습 으로 바 꾸 려 고 합 니 다.나의 다음 과 같은 수정 사항 을 참고 할 수 있다.
프로젝트 구 조 는 다음 그림 과 같다.
그 중에서 src\Models\DataItem.cs 의 예제 코드 는 다음 과 같다.
using System;
using System.Collections.Generic;
using System.Text;
namespace WpfApp.Models
{
public class DataItem
{
public string Title { get; private set; }
public DataItem(string title)
{
Title = title;
}
}
}
src\Models\\IDataService.cs 의 예제 코드 는 다음 과 같다.
using System;
using System.Collections.Generic;
using System.Text;
namespace WpfApp.Models
{
public interface IDataService
{
void GetData(Action<DataItem, Exception> callback);
}
}
src\Models\\DataService.cs 의 예제 코드 는 다음 과 같다.
using System;
using System.Collections.Generic;
using System.Text;
namespace WpfApp.Models
{
public class DataService : IDataService
{
public void GetData(Action<DataItem, Exception> callback)
{
var item = new DataItem("Hello .NET Core!");
callback(item, null);
}
}
}
src\\ViewModels\\MainViewModel.cs 의 예제 코드 는 다음 과 같다.
using GalaSoft.MvvmLight;
using WpfApp.Models;
namespace WpfApp.ViewModels
{
public class MainViewModel : ViewModelBase
{
private readonly IDataService _dataService;
private string _welcomeTitle;
public string WelcomeTitle
{
get { return _welcomeTitle; }
set { Set(ref _welcomeTitle, value); }
}
public MainViewModel(IDataService dataService)
{
_dataService = dataService;
_dataService.GetData(
(item, error) =>
{
if (error != null)
{
return;
}
WelcomeTitle = item.Title;
});
}
}
}
src\\Views\MainView.xaml 의 예제 코드 는 다음 과 같다.
<Window
x:Class="WpfApp.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Grid>
<Label
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="{Binding WelcomeTitle}"
FontSize="40" />
</Grid>
</Window>
src\\Views\MainView.xaml.cs 의 예제 코드 는 다음 과 같다.
using System.Windows;
using WpfApp.ViewModels;
namespace WpfApp.Views
{
public partial class MainView : Window
{
public MainView(MainViewModel vm)
{
InitializeComponent();
this.DataContext = vm;
}
}
}
src\\App.xaml 의 예제 코드 는 다음 과 같다.
<Application
x:Class="WpfApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp" />
src\\App.xaml.cs 의 예제 코드 는 다음 과 같다.
using Microsoft.Extensions.DependencyInjection;
using System.Windows;
using WpfApp.Models;
using WpfApp.ViewModels;
using WpfApp.Views;
namespace WpfApp
{
public partial class App : Application
{
public ServiceProvider ServiceProvider { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
ServiceProvider = serviceCollection.BuildServiceProvider();
var mainWindow = ServiceProvider.GetRequiredService<MainView>();
mainWindow.Show();
}
private void ConfigureServices(ServiceCollection services)
{
services.AddTransient<MainView>();
services.AddTransient<MainViewModel>();
services.AddScoped<IDataService, DataService>();
}
}
}
수정 이 끝 난 후에 우리 의 프로젝트 를 컴 파일 하여 정상적으로 컴 파일 하여 실행 할 수 있 도록 시도 합 니 다.다음 프로젝트 루트 디 렉 터 리 src 에'template.config 폴 더'를 새로 만 든 다음 template.json 파일 을 새로 만 들 고 다음 예제 설정 을 진행 합 니 다.
{
"$schema": "http://json.schemastore.org/template",
"author": "hippiezhou <[email protected]>",
"classifications": ["wpf", "mvvmlight", "Dependency Injection"],
"name": "wpf mvvmlight: use dotnetcore to create wpf with mvvmlight.",
"tags": {
"language": "C#",
"type": "project"
},
"identity": "wpf.mvvmlight",
"shortName": "wpf-mvvmlight",
"sourceName": "wpf.mvvmlight",
"preferNameDirectory": true
}
마지막 으로 터미널 을 열 고 디 렉 터 리 를 현재 프로젝트 디 렉 터 리 로 전환 한 다음(template.config 가 있 는 디 렉 터 리)다음 설치 작업 을 수행 합 니 다.
dotnet new -i C:\Users\hippieZhou\Desktop\helloworld\wpfapp
다음 그림 과 같이 프로젝트 템 플 릿 은 DotNetCore 의 CLI 에 포 장 됩 니 다.또한 C:\Users\\hippieZhou.templatengine\dotnetcli\\v 3.0.100-preview 3-010431 디 렉 터 리 에 있 는 templatecache.json 으로 끝 나 는 JSON 파일 내용 도 수정 되 며,Template Info 노드 에 다음 과 같은 노드 내용 을 추가 합 니 다.
{
"ConfigMountPointId": "f3861181-7a43-4fc5-ab1c-12d95e734c0a",
"Author": "hippiezhou <[email protected]>",
"Classifications": [
"wpf",
"mvvmlight",
"Dependency Injection"
],
"DefaultName": null,
"Description": "",
"Identity": "wpf.mvvmlight",
"GeneratorId": "0c434df7-e2cb-4dee-b216-d7c58c8eb4b3",
"GroupIdentity": "",
"Precedence": 0,
"Name": "wpf mvvmlight: use dotnetcore to create wpf with mvvmlight.",
"ShortNameList": [
"wpf-mvvmlight"
],
"Tags": {
"language": {
"Description": null,
"ChoicesAndDescriptions": {
"C#": ""
},
"DefaultValue": "C#"
},
"type": {
"Description": null,
"ChoicesAndDescriptions": {
"project": ""
},
"DefaultValue": "project"
}
},
"CacheParameters": {
"name": {
"DataType": "string",
"DefaultValue": null,
"Description": "The default name symbol"
}
},
"ConfigPlace": "/.template.config/template.json",
"LocaleConfigMountPointId": "00000000-0000-0000-0000-000000000000",
"LocaleConfigPlace": null,
"HostConfigMountPointId": "00000000-0000-0000-0000-000000000000",
"HostConfigPlace": null,
"ThirdPartyNotices": null,
"BaselineInfo": {},
"HasScriptRunningPostActions": false,
"ConfigTimestampUtc": null
},
주:만약 에 나중에 저희 가 실수 로 템 플 릿 을 삭제 하면 저 희 는 이 두 파일 에 해당 하 는 템 플 릿 노드 를 삭제 하면 CLI 에서 응용 을 취소 할 수 있 습 니 다.우 리 는 다음 조작 을 사용 하여 테스트 를 진행 할 수 있다.
# , wpf
dotnet new wpf-mvvmlight -n test
cd test
dotnet restore
dotnet run
만약 의외 의 사고 가 발생 하지 않 는 다 면,우 리 는 이 항목 의 코드 세그먼트 가 우리 가 정의 한 템 플 릿 코드 세그먼트 와 같다 는 것 을 볼 수 있 습 니 다.프로젝트 템 플 릿 을 마 운 트 해제 하면 다음 명령 을 사용 할 수 있 습 니 다.
dotnet new -u C:\Users\hippieZhou\Desktop\helloworld\wpfapp
주:사용자 정의 템 플 릿 을 잃 어 버 리 지 않도록 해 야 합 니 다.그렇지 않 으 면 마 운 트 해제 가 번 거 롭 습 니 다.사용자 정의 템 플 릿 을 NuGet 에 업로드 하여 다른 사람 이 다운로드 할 수 있 도록 하 는 방법 에 대해 서 는 소개 하지 않 습 니 다.구체 적 인 조작 은 참고 원 에서 DotNetCore MVC 에서 자신의 프로젝트 템 플 릿 을 만 드 는 방법 을 소개 하 는 것 과 같 습 니 다.내 가 본 논문 에서 만 든 코드 템 플 릿 도 제출 하지 않 을 것 이 며,MVVMLight 의 원작 자 Laurent Bugnion 이 칼 을 다 루 기 를 기다 리 는 것 이 좋 을 것 이다.
총결산
이 글 은 DotNet CLI 를 통 해 사용자 정의 WPF 프로젝트 템 플 릿 을 만 드 는 방법 을 소개 한다.실제 사용 하 는 과정 에서 CLI 의 기능 과 지원 하 는 매개 변수 가 더 많 기 때문에 관심 이 있 는 친 구 는 스스로 연구 할 수 있다.
관련 참고
how-to-create-a-dot-net-new-project-template-in-dot-net-core
자신의.NET Core 프로젝트 템 플 릿 만 들 기
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AWS 개발 중인 터미널 환경AWS CLI 를 사용하면 자주 발생하는 작업의 효율성을 높일 수 있습니다. 우선 인증 정보를 설정해야 한다.aws configure 또는 SSO를 사용하는 사람aws configure sso에서 명령을 실행할 때 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.