IT TIP

csproj 어셈블리 참조 이해

itqueen 2020. 11. 28. 13:21
반응형

csproj 어셈블리 참조 이해


VS2010을 사용하고 있으며 파일 참조를 통해 로컬 하드 디스크의 몇 가지 어셈블리를 내 C # 프로젝트에 추가하려고했습니다. csproj파일을 들여다 보니 가끔 파일 참조가 다음과 같이 나타납니다.

<Reference Include="name">

그러나 때로는 다음과 같이 나타납니다.

<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">

차이의 원인은 무엇입니까?


k3b의 답변에 영감을 받아 다른 테스트를 수행했습니다. 새로운 클래스 라이브러리 프로젝트를 만들었습니다.

  1. 파일 참조를 추가하십시오. 속성에서 특정 버전 의 초기 값 False 입니다. 같은 파일보기csproj

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
  2. 속성에서 특정 버전True로 변경합니다 . VS는 속성에 버전을 추가 합니다.Include

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
  3. 속성에서 특정 버전다시 False로 변경 합니다. VS는 자식 요소를 추가합니다 .SpecificVersion

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    

따라서 규칙은 다음과 같습니다.

  • 버전 에 존재 포함 속성을 더이없는 SpecificVersion자식 요소는 파일이 어셈블리를 특정 버전으로 구성되어 있습니다
  • SpecificVersion자식 요소 만 값으로 추가됩니다 거짓 .

내가 아직도 이해하지 못하는 한 가지는 :

  • 새 테스트 프로젝트의 경우 파일 참조를 제거하고 다시 추가하면 기본값 인 포인트 1의 형식으로 돌아갑니다.
  • 기존 프로젝트의 경우 파일 참조를 제거하고 다시 추가하면 포인트 3의 형식으로 돌아갑니다. 또한 특정 버전이 사용되지 않음을 의미하지만 포인트 1의 형식으로 돌아 가지 않는 이유가 궁금합니다. .

얻는 참조 유형은 어셈블리를 링크하는 방법에 따라 다릅니다.

  • 프로젝트 탐색기에서 참조 된 어셈블리 선택
  • 속성 페이지로 이동

거기에 부울 플래그 "특정 버전"이 있습니다.

  • true는 어셈블리에 version = xxx가 있어야 함을 의미합니다.
  • false는 어셈블리 버전 무시를 의미합니다.

(저는 german-vs2010 만 가지고 있으므로 독일어 "Spezifische Version"의 영어 번역은 약간 다를 수 있습니다.)

[최신 정보]

vcs2010-express 독일어를 사용하여 다음을 시도했습니다.

기본 SpecificVersion = False로 참조 추가 : 버전 없음

<Reference Include="Castle.Core">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
</Reference>

수정 된 참조 : SpecificVersion = True : 추가 된 버전

<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
</Reference>

다시 수정 된 참조 : SpecificVersion = False : 버전이 남아 있고 새 요소 SpecificVersion

<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
</Reference>

특정 버전은 기억되지만 무시되는 것 같습니다. <SpecificVersion>False</SpecificVersion>

참고 URL : https://stackoverflow.com/questions/16578819/understanding-a-csproj-assembly-reference

반응형