C# 프로젝트에서 nuget 패키지를 제작 할 때, dll 파일이 아닌 js파일 또는 이미지 파일등과 같은 정적 파일등을 nuget 패키지 파일에 포함시킬 수 있습니다.
하지만 content 혹은 contentFile 등으로 패키지안에 파일을 포함 시키는 것은 쉽지만, 해당 패키지를 설치하면 해당 asset 파일들이 프로젝트의 폴더로 직접 복사되는 것이 아니라 개발 컴퓨터의 nuget 파일이 관리되는 C드라이브의 nuget폴더에서 참조 형식으로 솔루션 탐색기에 나타나게 됩니다.
(jetbrain rider같은 ide는 아예 참조 형식으로도 나타나지 않습니다)
그래서 target파일을 별도로 제작해서 nuget파일을 설치 후 build 시 직접 하드카피 되도록 설정을 추가로 해 주어야 합니다.
다음은 nuget파일을 제작하는 프로젝트의 csproj 파일입니다.
<ItemGroup Label="Packaging">
<!-- 타겟 파일 패키지에 포함 -->
<Content Include="build\ProjectName.targets" PackagePath="build\ProjectName.targets" />
<!-- assets 파일 패키지에 포함 -->
<Content Include="assets/*.*" buildAction="Content">
<Pack>true</Pack>
</Content>
</ItemGroup>
그리고 패키지 파일에 포함 될 build폴더의 targets 파일입니다.
targets파일의 파일명은 프로젝트의 이름과 동일하게 해 주셔야 합니다.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SourceScriptFiles Include="$(MSBuildThisFileDirectory)..\content\assets\*.*" buildAction="Content" />
</ItemGroup>
<Target Name="CopyScriptsToProject" BeforeTargets="Build">
<!-- 빌드 시 복사하길 원하는 경로. 여기서는 wwwroot\js -->
<Copy SourceFiles="@(SourceScriptFiles)" DestinationFolder="$(ProjectDir)\wwwroot\js"
/>
</Target>
</Project>
이렇게 targets 파일을 만들어 주시고 nuget 패키징을 해주시면
nuget 설치 후 빌드시 자동으로 asset 파일들이 설정한 폴더로 복사 되게 됩니다.
'Software > .Net Core' 카테고리의 다른 글
리눅스에서 .net 웹앱을 서비스로 등록 시, "Could not find a part of the path" 에러가 발생할 때 (0) | 2023.02.16 |
---|---|
EntityFrameWork에서 .Max() 값의 Null 체크 방법 (0) | 2023.02.08 |
Linux에 Nginx를 통한 .net core 웹앱 배포 (0) | 2023.02.07 |