2012-08-08 4 views
2

두 가지 프로젝트가있는 솔루션이 있습니다. 첫 번째는 여러 서비스 끝점 (DataContract.dll)간에 공유되는 클래스의 정의를 포함하는 기본 클래스 라이브러리 프로젝트입니다. 두 번째는 공유 어셈블리에 정의 된 클래스를 사용하는 SQL CLR 프로젝트입니다. 로컬 컴퓨터에서이 어셈블리를 SQL Server 로컬 인스턴스에 등록하고 어셈블리에 대한 참조를 추가 한 다음 컴파일 할 수 있습니다. 그러나이 코드를 빌드 시스템에 적용하면 어셈블리가 서버에 등록되지 않습니다. 빌드 서버에 어셈블리를 수동으로 등록 할 수는 있지만 프로젝트에 참여하고 첫 번째 체크 아웃시 빌드가 손상된 새 개발자에게는 도움이되지 않습니다. 또한 빌드 서버는 빌드하는 임시 디렉토리의 임의의 이름을 선택하므로 빌드 서버의 데이터베이스 인스턴스에 대한 참조가 오래되거나 누락 될 수 있습니다. SQL CLR 프로젝트에서 공유 라이브러리 프로젝트를 참조 할 수있는 방법이 있습니까? 예를 들어, 빌드 서버와 새로운 개발자가 항상 훌륭한 빌드를 가질 수 있습니까?SQL CLR 프로젝트에서 비 -SQL CLR 프로젝트를 참조하려면 어떻게합니까?

+0

아마 내 설치가 다르지만 내 SQLCLR 프로젝트에서 추가 할 수있는 유일한 참조는 배포 대상 데이터베이스에서 가져온 것입니다. 빌드 서버가 같은 방식으로 구성되어야한다고 생각합니다. 그게 가능하지 않다면 빌드 머신의 GAC에 클래스 어셈블리를 등록하는 것이 유일한 선택 인 것 같습니다. –

+0

예, 해결해야하는 제한 사항입니다 (공유 어셈블리는 개발 컴퓨터와 빌드 컴퓨터에서 모두 액세스 할 수있는 DB에 등록해야하며 어셈블리는 컴파일을 수행하는 컴퓨터의 GAC에 있어야합니다). 빌드 머신이 이전 빌드를 지우고 (따라서 현재 GAC/DB 등록을 무효화 한 다음) 새 위치에서 다시 빌드합니다. 이로 인해 누락 된 참조가 생깁니다. – JadeMason

답변

0

필자는 SQLCLR 일 필요는 없지만 이전과 동일한 문제가있었습니다. 가장 좋은 방법은 create my own NuGet server입니다. 이게 복잡해 보이거나 리소스가 없다면 공유되는 libs에 대해 unc 공유 만하는 것이 좋습니다. 로컬에서 성공적으로 컴파일 한 후 바이너리를 unc 경로에 복사하는 포스트 빌드 스크립트를 작성할 수 있습니다.