본문 바로가기

.NET/C#

프로그래밍 방식으로 프로젝트의 Nuget 종속성 결정

출처 : https://www.codeproject.com/Articles/1215926/Programmatically-Determine-Nuget-Dependencies-for

나는 꽤 광범위하게 Nuget을 사용하고 싶다. 공개 소스 라이브러리를 대중에게 배포하는 데 적합하지만, 자신의 코드 라이브러리를 관리하고 프로젝트간에 공유 할 수있는 훌륭한 도구이기도합니다.

단일 프로젝트 파일에서 NuGet 유틸리티를 단순히 실행할 수없는 경우가 있습니다. 때로는 여러 프로젝트의 빌드 출력을 포함하는 경우와 같이 자체 NuSpec 파일을 만들어야합니다. 이 시점에서 NuSpec 파일에서 NuGet 종속성을 알기 때문에 NuSpec 파일에서 적절하게 참조 할 수 있습니다.

이 솔루션은 매우 간단합니다. 각 프로젝트의 종속성은 프로젝트의 루트 디렉토리에있는 packages.config 파일에 저장됩니다 이 구성 파일은 각 종속성의 ID, 버전 및 대상 프레임 워크를 나열하는 XML 문서를 포함합니다.

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Onion.SolutionParser.Parser" 

  version="1.0.0.0" targetFramework="net45" />
</packages>

따라서 XML을 객체에 deserialize하기 만하면 종속성을 카탈로그 화하거나, NuSpec 파일에 기록하거나, 다른 작업을 수행 할 수 있습니다.

public class NugetPackageConfigItem
{
  [XmlAttribute("id")]
  public string Id { get; set; }

  [XmlAttribute("version")]
  public string Version { get; set; }

  [XmlAttribute("targetFramework")]
  public string TargetFramework { get; set; }
}

[XmlRoot("packages")]
public class NugetPackageConfigCollection
{
  [XmlElement("package")]
  public NugetPackageConfigItem[] Packages { get; set; }

  public static NugetPackageConfigCollection Deserialize(string path)
  {
    using (var stream = File.OpenRead(path))
    {
      var serializer = new XmlSerializer(typeof(NugetPackageConfigCollection));
      var collection = serializer.Deserialize(stream) as NugetPackageConfigCollection;
      return collection;
    }
  }
}

이 팁이 도움이되고 분명하지 않기를 바랍니다. 행복한 코딩.