NuGet Packages XSD

.Net

Visual Studio는 NuGet Package Manager를 사용해서 의존성을 관리합니다.

이때, 프로젝트에 packages.config 파일이 만들어지고, 이 파일에 정의된 패키지를 빌드할 때, 내려받아서 빌드가 진행됩니다.

그런데, packages.config 파일을 열어보면 Xml Schema 를 찾을 수 없어서 packages 엘리먼트에 정의를 찾을 수 없다는 메세지가 표시됩니다.

nuget packages.config
nuget packages.config
View on Flickr

사용에는 문제없지만, 보기가 좋지 않다면, Xml 스키마 정의 Xml Schema Definition 파일을 추가해서 packages.config 파일의 정의를 IDE에 알려주고 사용되도록 할 수 있습니다.

XSD 추가

먼저 아래 내용으로 xsd 파일을 만듭니다.

파일이름은 namespace 이름과 동일하게 nuget.packages.xsd 라고 만들어서 사용합니다. 원하는 파일이름을 사용하시면 됩니다.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
      targetNamespace="urn:nuget.packages" xmlns="urn:nuget.packages">
  <xs:element name="packages">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="package" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="id" type="xs:string" use="required" />
            <xs:attribute name="version" type="xs:string" use="required" />
            <xs:attribute name="targetFramework" type="xs:string" use="optional" />
            <xs:attribute name="allowedVersions" type="xs:string" use="optional" />
            <xs:attribute name="developmentDependency" type="xs:string" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

파일의 위치는

  1. packages.config 파일이 있는 디렉터리
  2. Visual Studio 에서 Xml Schema 를 관리하는 디렉터리

2번을 추천합니다.

1번처럼 관리하면 프로젝트 디렉터리마다 xsd 파일을 추가해야 합니다.

Visual Studio 에서 xml Schema를 관리하는 디렉터리는 아래와 같습니다.

<Visual Studio 설치 디렉터리>\Xml\Schemas

e.g. Visual Studio 2015 를 기본 위치에 설치한 경우 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Xml\Schemas

xsd 파일을 Visual Studio 에서 Xml Schema를 관리하는 디렉터리에 추가한 후 Visual Studio 를 재시작합니다.

그 후 packages.config 파일을 열고, 아래와 같이 packages 엘리먼트에 네임스페이스를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<packages xmlns="urn:packages">
    <package id="jQuery" version="1.10.2" targetFramework="net452" />
</packages>

이제 package 엘리먼트의 속성을 추가할 때, xsd에 정의된 속성은 자동완성 기능으로 사용할 수 있는 속성을 알려줍니다.

이렇게 해서 신경쓰이던 packages 엘리먼트의 파란색 밑줄을 제거할 수 있습니다.