2013-05-20 4 views
3

저는 며칠 동안 NuGet과 씨름 해 왔으며 좌절감으로 StackOverflow를 사용하고 있습니다. 희망을 갖고 여기 누군가가 나를 올바른 방향으로 안내 할만큼 친절 할 수 있습니다.Visual Studio에서 NuGet.exe의 연결을 끊을 수 있습니까?

NuGet을 단순한 1 인칭 애완 동물 프로젝트에 여러 번 사용 했었지만, 실제로 신경 써서 완전히 연속 된 빌드 등을 원했던 것은 이번이 처음입니다. Git을위한 소스를 얻기 위해 간단한 NAnt 빌드 스크립트를 만들려면 외부 종속성이 낮춰지고, 컴파일하고, 테스트를 실행해야한다. - vanilla CI.

원래 솔루션 복원 작업을 시도하는 경로에 들었지만 제대로 작동하지 않거나 제대로 작동하지 않았습니다. Visual Studio는 빌드 서버에 있지 않으므로 거기에 설치되지 않습니다. 이는 옵션이 아닙니다. 제쳐두고, 솔루션 복원을 통해 두 명의 개발자 (소스를 신선하게 만들고 깔끔하게 만들려고 노력하는 개발자)만으로는 작업을 복원 할 수 없었습니다. "솔루션 복원 허용"이 모든 곳에서 켜져 있어야하고 (기본적으로는 아니기 때문에) 가정합니다. 솔직히 말하자면, 솔직히 말해서, 패키지 관리자가 IDE에 너무 밀접하게 결합되어있어서 불편 함을 느끼고 다른 방법으로 그것을 할 수 있기를 바랬습니다. 필자가 사용하던 패키지 관리자는 간단한 명령 행 도구입니다. CI 빌드 스크립트는 빌드에서이를 호출하고 개발자는 필요에 따라이를 수행합니다. 지난 두 시간 동안 NuGet 소스 코드에서 지난 30 분 동안이 작업을 수행하려고했습니다. 나는 도구와 싸우고 재부팅해야 할 것 같은 기분이 든다.

누구나 다중 개발자 + CI 시나리오에서 NuGet을 사용하는 것이 가장 좋은 예가 있습니까?

  1. 모든 모든 개발자가 소스를 얻을 수 및 3 이하 클릭 (바람직하게는 1)에서 테스트를 실행할 수 있습니다 :이 제가 원하는 것입니다. 바이너리가 로컬에 없으면 JIT를 가져옵니다. 그곳에 있다면 필요에 따라 업데이트 될 것입니다. NuGet이 설치되어 있어야합니다 (즉, NuGet.exe는 내 레포에 있어야합니다).
  2. Jenkins, TeamCity 등과 같은 CI 서버를 통해 # 1을 수행하십시오 (선호하는 것은 동일한 스크립트 사용)
  3. 지나치게 도구와 관련이 없다면이 모든 것을 Visual Studio에서 단일 패키지로 연결 해제하고 싶습니다. .config 파일과 모든 바이너리 파일을 repo 루트의 단일 Lib 폴더에 덤프합니다.

모든 포인터는 대단히 감사하겠습니다.

답변

0

, 나는 당신이 각 당신의 필요 조건 달성 할 수 있다고 생각하는 방법 : http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

  • : 당신은 당신의 솔루션에 "NuGet 패키지 복원 사용"할 필요가

    1. @ alexander-doroshenko가 TeamCity에 언급 한대로 Nuget Installer : http://confluence.jetbrains.com/display/TCD7/NuGet+Installer을 사용할 수 있지만 Jenkins에서 스크립트를 실행하려면 각 프로젝트의 TC (명령 줄 단계로도 작동)에서 시도하십시오.

      nuget.exe "[프로젝트 폴더]/패키지를 설치하십시오.설정 "-source" "-solutionDir" "-OutputDirectory"패키지 "

    2. 이 필수는 항목 1과 2에 의해 수행됩니다

  • +0

    이것은 내가 필요로하는 것처럼 들리지만 ... JetBrains에서 나온 것이라면 잘 작동하고 사용하기 쉽습니다. – kellyb

    0

    인 TeamCity는 "NuGet 설치"라고 그의 빌드 단계, 그것의 .sln 파일에서 필요한 패키지를 가져오고 로컬로 다운로드가 있습니다. Visual Studio를 실행할 필요가 없습니다.

    여기에 대해 자세히 알아보기 : 아래 http://confluence.jetbrains.com/display/TCD7/NuGet+Installer

    0

    빌드 프로세스에 NuGet을 통합하기위한 여러 가지 솔루션이 있습니다 NuGet을 패키지 관리자로 사용하여 개발자가 자신의 컴퓨터에 NuGet을 설치하지 않은 경우에도 솔루션을 구축 할 수있게하고 싶었습니다. NuGet이 솔루션 폴더에 바이너리를 추가하고 프로젝트 파일을 업데이트합니다 .NuGet이 항상 프로젝트 파일의 업데이트를 올바르게 수행하지는 않습니다. 우리의 경우 우리는 일부 프로젝트 파일이 업데이트되었지만 다른 사람은 업데이트되지 않았습니다. 프로젝트가 업데이트되었는지 확인하려면 프로젝트 파일을 XML 파일로 열어야합니다. 이를 위해 솔루션을로드하고 해당 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 언로드를 선택하십시오. 그런 다음 프로젝트를 다시 마우스 오른쪽 버튼으로 클릭하고 [PROJECT_NAME] 편집을 선택하십시오. 프로젝트 파일에서 첫 번째 속성 그룹에 속한

    • RestorePackages 속성을 볼 수 있습니다. 이 속성의 값은 true
    • 이어야합니다. 프로젝트 파일의 맨 끝에 import 문이 있어야합니다. 이 import 문은 NuGet 바이너리와 함께 제공되는 'NuGet.targets'파일을 가리켜 야합니다. 다음은

    당신이 걸릴해야 다음 단계는 솔루션 수준 NuGet 구성 파일을 제공하는 것입니다

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <PropertyGroup> 
        <SolutionDir Condition="'$(SolutionDir)' == '' or '$(SolutionDir)' == '*undefined*'">$(MSBuildProjectDirectory)\..</SolutionDir> 
        <ProjectGuid>{8B467882-7574-41B2-B3A8-2F34DA84BE82}</ProjectGuid> 
        <OutputType>Library</OutputType> 
        <RootNamespace>MyCompany.MyNamespace</RootNamespace> 
        <AssemblyName>MyCompany.MyNamespace</AssemblyName> 
    
        <!-- Allow NuGet to restore the packages if they are missing --> 
        <RestorePackages>true</RestorePackages> 
        </PropertyGroup> 
        <Import Project="$(SolutionDir)\BaseConfiguration.targets" /> 
        <ItemGroup> 
        <Reference Include="System" /> 
        <Reference Include="System.Core" /> 
        </ItemGroup> 
        <ItemGroup> 
        <Compile Include="MyClass.cs" /> 
        <!-- 
         .... MANY MORE FILES HERE 
        --> 
        </ItemGroup> 
    
        <!-- Import the Nuget.targets file which integrates NuGet in the build process --> 
        <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> 
        <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
         Other similar extension points exist, see Microsoft.Common.targets. 
        <Target Name="BeforeBuild"> 
        </Target> 
        <Target Name="AfterBuild"> 
        </Target> 
        --> 
    </Project> 
    

    (주로 편집) 우리의 프로젝트 파일 중 하나의 예이다는거야에서 패키지를 '설치'해야하는 위치와 package repository의 URL을 나타냅니다.

    (D) root 
        (D) build 
        (D) packages 
        (D) source 
         (D) .nuget 
          NuGet.config 
          NuGet.exe 
          NuGet.targets 
         (D) MyCoolProject 
          MyCoolProject.csproj 
         MyCoolProject.sln 
        (D) templates 
        NuGet.Config 
    

    (D) 디렉토리를 나타냅니다 여기서처럼 우리의 경우 솔루션 디렉토리 구조가 보인다.

    NuGet.config 파일에는 다음과 같은 구성 설정이 포함되어 있습니다.

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
        <packageRestore> 
        <add key="enabled" value="True" /> 
        </packageRestore> 
        <config> 
        <add key="repositorypath" value="packages" /> 
        </config> 
        <packageSources> 
        <add key="OurPackageServer" value="PACKAGE_SERVER_ADDRESS" /> 
        </packageSources> 
        <activePackageSource> 
        <add key="All" value="(Aggregate source)" /> 
        </activePackageSource> 
    </configuration> 
    

    이 구성 파일은 패키지 복원이 (패키지가 배치) 저장소 경로는 패키지 디렉토리와 어떤 패키지 소스가 활성화되어 있음을, 사용할 수 있음을 나타냅니다.

    NuGet.config 파일을 루트 디렉터리에두면 NuGet에 hierarchical configuration 옵션을 사용할 수 있습니다. 이렇게하면 개별 솔루션이 컴퓨터 별 구성을 무시할 수 있습니다. 다른 이점은 빌드 서버에 NuGet을 설치할 필요가 없다는 것입니다 (실행 파일과 구성이 저장소에 있기 때문에).

    이 설정을 통해 개발자는 Visual Studio에서 솔루션을 빌드 할 수 있습니다. NuGet이 설치되어 있지 않아도 개발자 컴퓨터에서 제대로 작동해야합니다. 그러나 그들은 Visual Studio에 NuGet을 설치하지 않고도 프로젝트에 패키지를 추가 할 수 없습니다. 빌드 서버에서 간단하게 MsBuild를 사용하여 패키지 저장소에서 패키지를 자동으로 다운로드하는 솔루션을 빌드 할 수 있습니다. Visual Studio는 빌드 머신에 설치하지 않아도됩니다 (원하는 .NET 프레임 워크 만).

    +0

    나는 상세한 설명을 매우 감사하게 생각한다.그 경로가 내가 추락하고있는 것과 아주 비슷하게 들린다. 나는 이것이 결국 작동하도록 할 수있을 것이라고 확신하지만 이것은 waaaay보다 복잡하다 (여러 설정 파일과 부두 경로 결정, Visual Studio 의존성 등). 나는 차라리 단순한 것을 가지고 있다고 생각합니다. 하나의 파일은 명단으로 사용되며, 한 가지만 읽으면 물건을 가져옵니다. 나는 JetBrains 물건을 계산할 것이다. .. 고마워. – kellyb

    관련 문제