2013-09-04 2 views
14

나는 git에서 2 개의 서브 모듈을 포함하는 프로젝트를 가지고있다. 두 프로젝트 모두 "nuget 패키지 복원"이 가능합니다.이 프로젝트도 상위 프로젝트입니다. 두 개의 하위 모듈에있는 패키지 폴더가 체크 인되지 않았고 체크 아웃 된 프로젝트에 존재하지 않습니다. 부모 프로젝트를 만들 때 Nuget은 하위 폴더의 패키지를 잘못된 패키지 폴더로 복원하려고 시도합니다!git submodule로 Nuget 패키지 복원

"C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\.nuget\NuGet.exe" install "C:\Dev\git\oasisdb\odb_oasis_repository\odb_oasis_rvm\ODB_OASIS_RVM_EF\ODB_OASIS_RVM_EF\packages.config" -source "" -NonInteractive -RequireConsent -solutionDir "C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\ " 

왜 nuget은 서브 모듈의 솔루션 디렉토리에서 복원되지 않습니까?

감사

+0

가능한 복제 ([NuGet이 누락 된 패키지를받지] http://stackoverflow.com/ques 17797052/nuget-not-getting-missing-packages) –

답변

8
+1

"답변"으로 표시하여 답이없는 더미에 표시되지 않도록하십시오. 감사. – granadaCoder

+1

절대적으로 아닙니다. 라이브러리 프로젝트는이를 참조하는 호스트 프로젝트에 대한 세부 사항을 알 필요가 없습니다. -1. – Nuzzolilo

+0

NuGet의 최신 버전에서이 변경이 있었습니까? – SuperJMN

11

가 Nuget가 열린 솔루션 디렉토리에 패키지를 복원한다.

당신은 서브 모듈 프로젝트의 .csproj을 편집에서 패키지 DLL 참조를 수정할 수 있습니다

<ItemGroup> 
    <Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
     <HintPath>..\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath> 
     <Private>True</Private> 
    </Reference> 

에 :

<ItemGroup> 
<Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>$(SolutionDir)\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

희망이 도움이!

+0

서브 모듈의 각 프로젝트를 수정해야만 효과적으로 서브 모듈을 수정할 수 있습니다. @ Nuzzolilo가 아래에서 말했듯이, 라이브러리는 그것을 사용하는 프로젝트에 대해 아무 것도 알지 못한다. 그들은 불가 지론이어야합니다. 죄송합니다. 그러나 이것은 유효한 대답이 아닙니다. – SuperJMN

+0

물론이 모듈은 서브 모듈을 소유하고이 트릭을 어떻게 처리해야하는지 알고있는 경우에만 사용해야합니다. 설명 주셔서 감사합니다. – Srounsroun

0

VS2015 업데이트 1 이상을 사용하는 경우 convert your project to use project.json to fix this을 사용할 수 있습니다. 한마디로

: 모든 패키지에 대한

  • 실행 Uninstall-Package <package name> -Force -RemoveDependencies. 이 작업을 수행하기 전에 메모장에 packages.config을 복사하여 붙여 넣기 할 수 있습니다.
  • 편집 프로젝트 파일을 언로드 및 제거, 프로젝트를 저장, 프로젝트에서 packages.config 삭제 :
    • 모든 참조 .props 파일 관련 상단에 패키지를 참조
    • 모든 <Reference> 요소를 nuget하는
    • 패키지에 Roslyn 분석기가 포함되어 있으면 다음과 같이 시작하는 하단의 파일이 참조하십시오. 그 (것)들을 역시 제거하게 확실하십시오. 마지막으로 다시 패키지 중 하나를 손으로 dependencies에서 또는 Install-Package를 사용하거나 nuget의 UI에서와 추가

      { 
          "dependencies": { 
          }, 
          "frameworks": { 
          ".NETFramework,Version=v4.6.1": {} 
          }, 
          "runtimes": { 
          "win": {} 
          } 
      } 
      

      : 파일 및

    함께 project.json 추가 프로젝트를 relod 저장

  • VS.

    또한 packages.config 파일을 명시 적으로 찾기 때문에 내 프로젝트에서 Microsoft.Bcl.* 패키지를 모두 제거해야했습니다.

    편집 :.이합니다 (Microsoft.Bcl.* 패키지를 제거하면 .targets 파일 Microsoft.Bcl.Build 여전히 packages.config를 찾습니다 추가하기 때문에 프로젝트가 잘 구축한다하더라도, 당신은 컴파일 타임 오류를 줄 것이다

    이를 억제하기 위해, 편집 프로젝트 파일을 추가합니다.

    이것은 Condition 속성이 설정되어 있지 않는 최초의 <PropertyGroup>에 갈 필요
    <SkipValidatePackageReferences>true</SkipValidatePackageReferences> 
    

    없는 일이 있다면, 바로 위쪽에 또 다른 추가, 같은 :

    <PropertyGroup> 
        <SkipValidatePackageReferences>true</SkipValidatePackageReferences> 
    </PropertyGroup> 
    
  • 1
    당신이 심볼릭 링크 사용할 수 있습니다

    : 솔루션의 packages 디렉토리에 nuget 다운로드 후 모든 패키지를 을 (솔루션 수준 packages 디렉토리에 이름 packages 및 링크)를 서브 모듈의 루트 디렉토리에 심볼릭 링크를 만들 수 있습니다.

    SET sourceDir=$(SolutionDir)packages 
    SET destDir=$(SolutionDir)..\..\submodules\saturn72\src\packages 
    
    if not exist %sourceDir% mkdir %sourceDir% 
    
    if not exist %destDir% mklink /j %destDir% %sourceDir% 
    

    전체 설명 여기 :

    이 일괄입니다 : - 짧은에서 시동 프로젝트는 모든 서브 모듈에 packages 디렉토리 솔루션 packages 디렉토리 사이의 심볼릭 링크를 생성 빌드 전 이벤트를 추가 Visual Studio Solution with Nuget git submodules

    소스 코드는 여기에 있습니다 : SolutionWithGitSubmodulesAndNuget

    관련 문제