본문 바로가기
C#/기본

.csproj 파일

by ddanss 2025. 5. 6.
728x90

확장자 : .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

댓글