확장자 : .csproj
형식 : XML
역할 : 프로젝트 이름, 출력 형식, 대상 .NET 프레임워크, 의존성(NuGet 패키지, 프로젝트 참조 등) 등을 정의
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.7" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BusinessLayer\BusinessLayer.csproj" />
</ItemGroup>
</Project>
내가 만든 프로젝트 파일에서는 이런식으로 나와있었다
<Project Sdk="Microsoft.NET.Sdk"> : 일반적인 콘솔앱, 클래스 라이브러리 등
<Project Sdk="Microsoft.Net.Sdk.Web"> : ASP.NET Core 웹 애플리케이션용
<Project Sdk="Microsoft.Net.Sdk.Razor"> : Razor 컴파일 포함(Blazor, Razor Pages 등)
<Project Sdk="Microsoft.Net.Sdk.Worker"> : 백그라운드 서비스/워커 앱용
내가 만든건 ASP.NET Core 웹앱이라고 보여준다
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
PropertyGroup안에 있는 설정들은 C#프로젝트의 주요 동작 방식을 정의
1. TargetFramework는 사용할 .NET버전. net8.0은 8.0버전
2. Nullable은 Nullable Reference Types를 활성화하는지를 묻는것이다. null 가능여부를 명시적으로 관리(버그방지)
(string? name = null) 과 같은.
3. ImplicitUsings
기본적인 using구문을 자동으로 포함시켜주는것이다, 필요없는 using이 많아질 수 있어 disable할 수 도 있다
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.7" />
</ItemGroup>
ItemGroup은 참조항목(NuGet패키지, 프로젝트 참조 등)을 묶는 그룹
PackageReference는 Nuget패키지를 참조하겠다는 뜻
Include는 사용할 패키지 이름
Microsoft.VisualStudio.Web.CodeGeneration.Design
- 이건 ASP.NET Core에서 코드 자동 생성을 할 수 있게 도와주는 기능을함
<ItemGroup>
<ProjectReference Include="..\BusinessLayer\BusinessLayer.csproj" />
</ItemGroup>
현재 이 프로젝트가 BusinessLayer이라는 다른 프로젝트의 코드를 참조한다는 뜻
여러개의 프로젝트로 구성된 솔루션을 만들때, 공통 로직(비즈니스로직, 데이터처리 등)을 재사용하기 위해 자주 사용됨
다른 프로젝트에서 BusinessLayer의 클래스, 메서드 등을 using BusinessLayer;형태로 직접 사용가능
ItemGroup 안에서 자주 쓰이는 다른 항목들
1. PackageReference : NuGet패키지 참조 - Newtonsoft.Json, Serilog 등
2. ProjectReference : 다른 C# 프로젝트 참조
3. Reference : DLL파일 등 외부 어셈블리 직접 참조 - System.Data.dll
4. Compile : 컴파일할 C# 코드파일 지정 - Compile Include="Code.cs"
5. None : 프로젝트에 포함되지만 빌드에는 무관한 파일 : README.md, 설정파일 등
6. Content : 출력 디렉토리에 포함될 리소스 파일 : 이미지, JSON, HTML 등
7. EmbeddedResource : DLL 내부에 포함되는 리소스파일 : .resx, .txt등
8. Folder : 프로젝트 구조에 폴더 표시 - 구조정리용
.csproj에서 사용 가능한 주요 그룹 요소들
1. PropertyGroup : 속성 정의 - 빌드 설정, 대상 프레임웤, 옵션 등 전반적인 설정
2. ItemGroup : 항목 정의 - 참조, 리소스, 코드 파일등 프로젝트 항목 지정
3. Target : 빌드 단계 작업 정의 - 특정 이벤트 발생 시 동작(예시; 빌드 후 실행)
<Target Name="AfterBuild">
<Exec Command="echo 빌드가 완료되었습니다." />
</Target>
4. Import : 다른 MBBuild 파일 포함 : 설정 분리나 공통 설정 재사용 시
<Import Project="CustomSettings.props" />
5. UsingTask : 사용자 정의 작업 등록 : MSBuild 커스텀 테스크 정의용
<UsingTask TaskName="MyTask"
AssemblyFile="MyTasks.dll" />
6. Choose / When / Otherwise 조건분기 : 조건에 따라 설정 분기 적용
<Choose> - 빌드 속성에 따른 조건분기
<When Condition="'$(Configuration)' == 'Debug'">
<PropertyGroup>
<DefineConstants>DEBUG</DefineConstants>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<DefineConstants>RELEASE</DefineConstants>
</PropertyGroup>
</Otherwise>
</Choose>
'C# > 기본' 카테고리의 다른 글
| Program.cs (0) | 2025.05.07 |
|---|---|
| launchSettings.json (0) | 2025.05.06 |
| appsettings.json과 appsettings.Development.json (0) | 2025.05.06 |
| 비동기 (0) | 2025.04.15 |
| try catch 예외처리 (0) | 2025.04.12 |
댓글