2010-06-01 3 views
0

하나의 솔루션에서 두 프로젝트간에 공통의 네임 스페이스를 공유하려고합니다. 프로젝트는 "청사진"과 "저장소"입니다. Blueprint는 전체 응용 프로그램에 대한 인터페이스를 포함하며 응용 프로그램 구조에 대한 참조로 사용됩니다. 그러나두 개의 VS2008 C# 클래스 라이브러리 프로젝트가 단일 네임 스페이스를 공유 할 수 있습니까?

namespace Application.Repositories{ 
    public class STDRepository: IRepository 
    { 
     STD Get(Guid id){ 
      return new SkankyExGirlfriendDataContext() 
          .FirstOrDefault<STD>(x=>x.DiseaseId == id); 
     } 
    } 
} 

이 작동하지 않는 : 나는 클래스를 다음 클래스가있는 저장소 프로젝트에서

namespace Application.Repositories{ 
    public interface IRepository{ 
     IEntity Get(Guid id); 
    } 
} 

: 청사진 프로젝트에서

는, 나는 다음과 같은 선언 인터페이스를 가지고 . Repositories 프로젝트에는 Blueprint 프로젝트에 대한 참조가 있습니다. VS 오류가 나타납니다 : "형식 또는 네임 스페이스 이름 'IRepository'을 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) - 일반적으로 수정하기 쉽지만 using 문을 추가하는 것은 의미가 없습니다 그들은 네임 스페이스가 같기 때문에 어쨌든 해봤지만 작동하지 않았습니다. 참조가 추가되었으며 해당 인터페이스를 참조하는 코드 줄이 없으면 두 프로젝트가 모두 성공적으로 컴파일됩니다. 여기에서 길을 잃어 버렸습니다. 아무것도 찾지 못했고, 근본적으로 내가하고있는 일에 뭔가 이상한 점이 있다고 가정하고 있습니다 ... 그러나 나는 그것이 무엇인지 모릅니다. 그래서,이 문제를 해결하는 방법에 대한 설명이나 지침을 고맙게 생각합니다.

참고 :이 방법으로 인터페이스를 동일한 네임 스페이스에 유지하려는 이유는 솔리드 프로젝트가 모든 프로젝트를 유지하기를 원하기 때문입니다. 응용 프로그램의 전체 아키텍처에 대한 참조를 갖기 위해 인터페이스를 사용합니다. 응용 프로그램 네임 스페이스 대신 모든 인터페이스를 Blueprint.Application 네임 스페이스에 배치하는 등의 해결 방법을 고려했습니다. 그러나 응용 프로그램의 거의 모든 페이지에 using 문을 써야하고 내 손가락이 피곤합니다. 다시 고마워 ...

+0

리포지토리 프로젝트에서 작업 할 때 VS IntelliSense에서 IRepository가 표시됩니까? –

+0

리포지토리 프로젝트에 청사진 프로젝트에 대한 참조가 있는지 확인하십시오. 그냥 나 자신을 시도하고 그것은 나를 위해 일했다. – MatthewKing

답변

1

이것은 가능합니다.

예를 들어, mscorlib.dll과 System.dll은 모두 System 네임 스페이스의 클래스를 정의하는 서로 다른 두 C# 프로젝트입니다. (기타 중)

Repositories 프로젝트가 Blueprint을 참조하지 않는 경우이 오류가 발생합니다.

+0

명시된 바와 같이 저장소 프로젝트는 참조 청사진을 사용하지 않습니다. 오류가 계속 발생합니다. – smartcaveman

+0

정말입니까?청사진의 수업이 IntelliSense에 표시됩니까? 참조를 제거한 다음 프로젝트 탭에서 다시 추가하십시오. – SLaks

0

달성하려는 작업에 대해 모든 것을 하나의 어셈블리에 넣고 모든 클래스를 대신 internal으로 선언 할 수도 있습니다. 이 방법은 그것을 사용하는 프로그램은 인터페이스를 볼 수 있습니다. 일부 매개 변수에 따라 특정 인터페이스의 인스턴스를 만드는 일련의 팩토리 클래스를 만들어야합니다. 작은 어셈블리가 많은 오버 헤드를 유발하기 때문에 이것은 실제로가는 길입니다. Microsoft Performance Guidelines을 참조하십시오.

+0

AssemblyInfo.cs를 꺼내 각 프로젝트의 링크를 단일 어셈블리 파일에 추가 했으므로 하나의 어셈블리로 컴파일 될 것으로 예상됩니다. 정확하지 않습니까? – smartcaveman

1

좋아요. 그렇기 때문에 SLAKs가 올바른 대답으로 표시되었으므로 SLAK은 올바른 대답이었고 향후 다른 사람이 볼 수있는 해결책이 될 것입니다. 내 문제는 내 솔루션의 다른 6 개 프로젝트 파일과 관련이 있습니다. 나는 그 (것)들을 내리고 2 개의 배치 한 예만을 가진 해결책을 재건하고 갑자기 내 IntelliSense가 작동하기 시작했다. 이 두 프로젝트에 오류가 없었음에도 다른 프로젝트의 오류로 인해 컴파일시 문제가 발생했습니다. 젠장 ... 고마워.