빌드 프로세스에 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 프레임 워크 만).
이것은 내가 필요로하는 것처럼 들리지만 ... JetBrains에서 나온 것이라면 잘 작동하고 사용하기 쉽습니다. – kellyb