여러.NET 프로그램 집합 을 어떻게 통합 합 니까?

여러 프로그램 을 한 파일 에 통합 하 는 솔 루 션 을 찾 은 사람 은 누구나 ILMerge,SmartAssembly 등 도 구 를 들 어 본 적 이 있 을 것 이다.
또 다른 유명한 방안 은 DLL 을 자원 으로 삽입 하 는 것 이다.(관심 이 있다 면 이 방안 을 묘사 한 멋 진 글 이 있다.삽 입 된 자원 에서 DLL 불 러 오기[^].
어떤 경우,나 는 이러한 방법 을 사용 할 필요 가 있다 는 것 을 깨 달 았 다.만약 우리 가 이러한 어 셈 블 리 소스 코드 가 있다 면,우 리 는 컴 파일 할 때 모든 소스 코드 파일 을 하나의 항목 으로 가 져 와 서 이 물건 들 의 완벽 한 조합 을 얻 을 수 있 을 것 이다.
여기 서 나 는 이 일 을 어떻게 하 는 지 에 대해 간략하게 설명 하려 고 시도 할 것 이다.
프 리 젠 테 이 션 을 위해 콘 솔 프로그램(이것 은 우리 의 메 인 프로그램)이 있다 고 가정 하고 두 개의 라 이브 러 리(우리 의 2 급 프로그램)를 사용 했다.우 리 는 그것들 을 하나의 파일 로 조합 하고 싶다.

우 리 는 구상 에 따라 이 해결 방안 을 구축 하여 이 세 가지 프로그램 을 얻 었 다.

MyExecutable 프로젝트 파일(MyExecutable.csproj)은 XML 기반 파일 입 니 다.내용 을 보면 ItemGroup 노드 를 발견 할 수 있 습 니 다.이 노드 보 아 함 은 구축 과정 에서 입력 한 하위 요 소 를 정의 합 니 다.이 하위 요 소 는 번역 되 어야 할 프로그램의 자원 파일 이나 복사 되 어야 할 자원 을 참조 할 수 있 습 니 다.그리고 구축 처리 에 포 함 된 프로그램 집합(관심 이 있다 면MSDN MSBuild에서 Visual Studio 프로젝트 파일 에 대한 정 보 를 더 알 수 있 습 니 다).
이제 ItemGroup 노드 를 찾 습 니 다.포함 할 프로그램 집합 을 참조 하 였 습 니 다.

<ItemGroup>
  <ProjectReference Include="..\MyLibrary1\MyLibrary1.csproj">
    <Project>{ea53ca82-13d7-4be1-b95a-4d9d7853d46e}</Project>
    <Name>MyLibrary1</Name>
  </ProjectReference>
  <ProjectReference Include="..\MyLibrary2\MyLibrary2.csproj">
    <Project>{c31d21f3-e86a-4581-b4e8-acae6644d19e}</Project>
    <Name>MyLibrary2</Name>
  </ProjectReference>
</ItemGroup>
Debug 모드 에서 MyExecutable 을 구축 할 때 MSBuild 에 가서 이 항목 을 참조 하 라 는 조건 을 추가 합 니 다.

<ItemGroupCondition="'$(Configuration)'=='Debug'">
발표(Release)모드 에 대해 서 는 MyLibrary 1 과 MyLibrary 2 에서 온 모든 소스 코드 파일 을 포함 합 니 다.컴 파일 도 진행 합 니 다.우 리 는 하나의 어댑터("\*\*.cs")를 이용 하여 디 렉 터 리 와 하위 디 렉 터 리 를 모든 CS 파일 에 포함 시 킬 것 입 니 다.어댑터 도 우리 가 원 하지 않 는 자원 코드 파일 을 포함 시 킬 것 입 니 다(obj 폴 더 의 Temporary Generated File [guid].cs 및 Property 폴 더 의 Assembly Info.cs 파일 이 이러한 경우 입 니 다)따라서 우 리 는 그것들 을 제외 할 것 입 니 다.

<ItemGroup Condition=" '$(Configuration)' == 'Release' ">
  <Compile Include="..\MyLibrary1\**\*.cs"
           Exclude="..\MyLibrary1\Properties\AssemblyInfo.cs;
                    ..\MyLibrary1\obj\**;
                    ..\MyLibrary1\bin\**">
    <Link>MyLibrary1\%(RecursiveDir)%(Filename)%(Extension)</Link>
    <Visible>false</Visible>
  </Compile>
  <Compile Include="..\MyLibrary2\**\*.cs"
           Exclude="..\MyLibrary2\Properties\AssemblyInfo.cs;
                    ..\MyLibrary2\obj\**;
                    ..\MyLibrary2\bin\**">
    <Link>MyLibrary2\%(RecursiveDir)%(Filename)%(Extension)</Link>
    <Visible>false</Visible>
  </Compile>
</ItemGroup>
이렇게 하면 됩 니 다.MyExecutable.csproj 의 수정 사항 을 저장 하고 발표 모드 에서 해결 방안 을 재 구축 합 니 다.

내 가 강조 하고 자 하 는 마지막 일 은 우리 가 형식적 으로 모든 프로그램 소스 파일 의 컴 파일 을 한 항목 으로 옮 기 는 것 이기 때문에 프로젝트 는 그 파일 들 을 컴 파일 할 수 있어 야 하기 때 문 입 니 다.따라서 다음 과 같은 것들 을 고려 해 야 합 니 다.
성공 적 으로 구축 하기 위해 서 는 메 인 프로그램 에 2 급 프로그램의 모든 인용,자원,설정 등 이 필요 합 니 다.
모든 프로그램 집합 은 같은.NET 언어 로 작성 해 야 합 니 다.
이상 은 본문 에서 말 한 모든 내용 이 니 여러분 들 이 좋아 하 시 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기