우리의 프로젝트에 상황은 동일하며 우리는 다음과 같은 접근 방식을했다 :
이
첫 번째 단계는 패키지를 정의하는 nuspec 파일을 만드는 것입니다. 모든 논문 파일을 솔루션의 루트 디렉토리에있는 ".nuspec"폴더에 저장했습니다. nuspec 파일은 ".nuspec"이라는 솔루션 폴더의 솔루션에도 추가됩니다.
솔루션 자체에는 버전 정보뿐만 아니라 저작권 정보가 포함 된 전역 AssemblyInfo 파일이 있습니다. 간단히 말해서 우리 프로젝트간에 공통적 인 모든 정보입니다. 각 프로젝트에는 각 프로젝트에 대한 정보를 추가하는 고유 한 어셈블리 정보가 있습니다.
nuspec 파일에 버전이 없습니다. 대신 우리가이 자리 표시 자 $(version)
를 사용
<?xml version="1.0" encoding="utf-16"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyCompany.MyProduct.Server.DataAccess</id>
<version>$(Version)</version>
<authors>MyCompany</authors>
<projectUrl>http://example.com/myProduct.html</projectUrl>
<iconUrl>http://example.com/myProduct.icon.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Some description goes here.</description>
<summary>The summary goes here</summary>
<copyright>Copyright © MyCompany 2015</copyright>
<language>en-US</language>
<dependencies>
<dependency id="MyCompany.MyProduct.Common" version="$(Version)" />
<dependency id="MyCompany.MyProduct.Server" version="$(Version)" />
</dependencies>
</metadata>
<files>
<file src="path\to\MyCompany.MyProduct.Server.DataAccess.dll" target="lib\net45\MyCompany.MyProduct.Server.DataAccess.dll" />
</files>
</package>
(. 물론 의존성 종속성 자체가있을 수 있습니다 서버 구성 요소는 예를 들어, 로깅 구성 요소를 참조 할 수 있습니다.)
처음에 우리는 콘솔 응용 프로그램을 만들어 전역 AssemblyInfo 파일에서 솔루션 버전을 읽고이를 패키지를 작성하고 공개하기 전에 모든 nuspec 파일로 구문 분석하십시오.
콘솔 응용 프로그램은 정상적으로 작동했지만 지속적인 통합을 사용하는 TFS 환경에서 유지 관리하는 것은 약간 지루했습니다. 그래서 우리는이 작업을 수행하는 커스텀 TFS 빌드 템플릿을 정의했습니다.우리 프로젝트의 모든 너겟 패키지를 만들려면 지금해야 할 일은 TFS 빌드를 트리거하는 것입니다.
이 접근 방식은 모든 패키지가 동일한 버전을 가지므로 함께 잘 작동한다는 이점이 있습니다. 이 방법은 모든 패키지가 동일한 버전을 가지며 독립적으로 릴리스 될 수 없다는 단점이 있습니다.
우리는 심하게 통합 된 구성 요소의 대기업을 만들 수 없기 때문에이 방법을 선택했습니다. 우리 프로젝트는 모두 아주 비슷한 작은 LOB 응용 프로그램을 개발하는 데 사용되는 작은 프레임 워크를 제공합니다. 우리가 다양한 패키지 세트로 프레임 워크를 제공한다는 사실 때문에 개발자는 실제로 필요한 패키지를 선택한 다음 해당 패키지 만 설치할 수 있습니다. 개발자가 누락 된 기능을 나중에 추가하기로 결정한 경우에는 이미 설치된 것과 동일한 버전의 관련 패키지를 설치하기 만하면됩니다. 따라서 호환성에 대해 걱정할 필요가 없습니다.
위대한 답변, 감사합니다. 우리는 여러분이 묘사 한 것과 같은 상황을 가지고 있습니다 만, 지금까지는 모든 lib를 포함하는 하나의 커다란 패키지 만 만들었습니다. 이제 우리는 필요하지 않은 다른 모든 크래프트/웹 파일 등을 끌어 들이지 않고도 서로 다른 비트를 독립적으로 참조 할 수 있어야합니다. 이것은 지난 단락에서 묘사 한 것과 정확히 같습니다. 완벽한 감사입니다. – xan
'''$ (Version) '이 유효한 버전 문자열이 아닙니다 .''' 당신은 이것을 어디에서 정의합니까? – Wilbert
@Wilbert 제 대답을 자세히 읽으십시오. 처음에는 작은 콘솔 응용 프로그램을 사용하여 $ (Version) 자리 표시자를 대체했습니다. 요즘 우리는이 목표를 달성하기 위해 TFS 빌드를 사용합니다. – Spontifixus