문제

어의 인스턴스 System.Reflection.Assembly.

도움이 되었습니까?

해결책

가능하지 않습니다.아무것도 지정합니다"뿌리"네임스페이스가 있습니다.기본 네임스페이스 옵션은 visual studio 일이 아닙니다.순 것

다른 팁

각적 딜레마는 시간이 많이 내가 원하는 로드하는 리소스에서 현재 어셈블리에 의해 매니페스트 자원 stream.

사실은 포함하는 경우는 파일을 리소스로서 어셈블리 Visual Studio 를 사용하는 매니페스트는 자원 이름에서 파생됩의 기본 네임스페이스 어셈블리에 정의된 대로 Visual Studio 프로젝트입니다.

최고의 솔루션을 내가 가지고 올(피하려 하드 코딩하는 네임스페이스의 기본 문자열로 어딘가)는 단순히 지키 리소스 로드 코드를 항상 일어나 내부에서는 클래스에서도 기본 네임스페이스 및 다음에 근-일반적인 접근 방법이 사용될 수 있습니다.

이 예제는 로드 포함된 스키마.

XmlSchema mySchema;
string resourceName = "MyEmbeddedSchema.xsd";
string resourcesFolderName = "Serialisation";
string manifestResourceName = string.Format("{0}.{1}.{2}",
    this.GetType().Namespace, resourcesFolderName, resourceName);
using (Stream schemaStream = currentAssembly.GetManifestResourceStream(manifestResourceName))
    mySchema = XmlSchema.Read(schemaStream, errorHandler);

도 참조하십시오: 을 얻는 방법의 네임스페이스 어셈블리?

편집:또한 발견 매우 상세한 질문에 대한 답변을 나는 응답에 http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/3a469f5d-8f55-4b25-ac25-4778f260bb7e

다른 편집 경우에는 사람들이 동일한 질문을 찾고 올:훌륭한 아이디어를 해결하는 리소스-로딩 질문에 여기: 어떻게 얻는 기본 네임스페이스의 프로젝트 csproj(VS2008)

이 될 수 있다는 어떤 숫자의 네임스페이스에서 지정한 어셈블리,그리고 아무것도 필요한 모든 시작에서 일반적인 루트입니다.최고 당신이 할 수 있는 것을 반영하여 모든 유형 어셈블리에이고 목록을 구축의 독특한 네임스페이스 등이 있습니다.

어셈블리는 반드시 없어 루트 네임스페이스가 있습니다.네임스페이스 및 어셈블리는 직교이다.

당신이 무엇을 찾고 있을 수 있습니다 대신은 종류를 찾을 내에는 어셈블리,그리고 그때 그것의 네임스페이스입니다.

당신을 수행할 수 있어야 합를 사용하여 이 GetExportedTypes()회원이 다음 사용 네임스페이스 속성 중 하나에서 반환된 형식 핸들이 있습니다.

다만,보증하지 않는 모든 유형에 있는 동일한 네임스페이스(또는 동일한 네임스페이스 계층구조).

나는 그냥 만들어 있는 빈 내부 클래스라는 루트를 넣어 프로젝트에서 뿌리(가정이 귀하의 루트 네임스페이스).그럼 내가 사용하는 이 모든 곳에서 내가 필요로 루트 네임스페이스:

typeof(Root).Namespace;

확실히 내가와 끝까지 사용하지 않는 파일이지만,그것은 깨끗합니다.

GetType(frm).Namespace

frm 시작 양식

을 얻을 유형유형 체에서 정의합니다.는 객체에는 네임스페이스를 제공합니다.을 기억하는 어셈블리할 수 있는 여러 네임스페이스입니다.

네임스페이스 함께 할 수 없어 어셈블리는 어떤 간의 매핑에서는 네임스페이스 클래스 어셈블리에서는 순수로 인한 이름 지정 규칙(또는 우연).

실제적으로 간접적인 방법 그것을 얻기 위하여,열거한 이름이 어셈블리의 매니페스트에는 리소스입니다.당신이 원하는 이름으로 끝나 그것의 일부는 당신이 알고있다.

을 반복하기보다는 코드가 여기에 참조하십시오 을 얻을 기본 네임스페이스 이름을 조립합니다.GetManifestResourceStream()메서드

내가 사용하는 typeof(App).Namespace 내 응용 프로그램 WPF.용 클래스에 대한 필수 어떤 응용 프로그램 WPF 그에 위치한 루트입니다.

질문을 했는 나를 여기에 도착했다,"나는 전화 라이브러리 코드 N 방법을 깊고 원하는 네임스페이스의 프로젝트에 대한 예 MVC 응용 프로그램이 실제로 실행-나는 어떻게 얻는가?"

작은 해키지만,당신은 단지를 잡아 stacktrace 및 여과기:

    public static string GetRootNamespace()
    {
        StackTrace stackTrace = new StackTrace();
        StackFrame[] stackFrames = stackTrace.GetFrames();
        string ns = null;
        foreach(var frame in stackFrames)
        {
            string _ns = frame.GetMethod().DeclaringType.Namespace;
            int indexPeriod = _ns.IndexOf('.');
            string rootNs = _ns;
            if (indexPeriod > 0)
                rootNs = _ns.Substring(0, indexPeriod);

            if (rootNs == "System")
                break;
            ns = _ns;
        }

        return ns;
    }

이 모든 일을 stacktrace,실행하는 아래 방법들을 통해서 가장 최근에 뿌리,그리고 필터링 시스템입니다.면 그것을 발견한 시스템 호출이 그것을 알고 그것은 너무 멀리 사라 졌어요,그리고 당신이 좋아하는 네임스페이스 바로 위에 있습니다.당신은 실행 단위 테스트,MVC 응용 프로그램,또는 서비스,시스템 컨테이너가 될 것입니 앉아 1 수준보다 더 깊은 뿌리 프로젝트의 네임스페이스,그래서 봐라.

일부 시나리오에서 어디스 코드는 중개(같은 시스템입니다.작업)에 따라 이를 반환합니다.나의 목표는 예를 들어 일부 시작 코드고 그것을 쉽게 찾아보실 클래스나 컨트롤러나 무엇이든 루트 네임스페이스는 경우에도,코드 작업을 하고 앉아서 라이브러리입니다.이를 달성하는 작업입니다.

나는 확실히 향상시킬 수 있습니다-나는이 해키 방식을 개선할 수 있는 많은 방법의 개선을 환영합니다.

을 추가하여 다른 모든 답변을 여기에서 희망을 반복하지 않고,정보를 여기에 나는 어떻게 해결을 사용하여 이를 Linq.나의 상황과 비슷하는 리사의 대답이다.

나의 솔루션은 다음과 같은 사항:

  • 당신은 Visual Studio 를 사용하고 있는 루트 네임스페이스의 정의를 위해 귀하의 프로젝트,나는 가정은 무엇을 요구하고 있기 때문에 당신이 사용하는 용어"루트 네임스페이스"
  • 당신이 포함 interop 유형에서 참조하는 어셈블리
Dim baseNamespace = String.Join("."c,
    Me.GetType().Assembly.ManifestModule.GetTypes().
        Select(Function(type As Type)
                    Return type.Namespace.Split("."c)
                End Function
        ).
        Aggregate(Function(seed As String(), splitNamespace As String())
                        Return seed.Intersect(splitNamespace).ToArray()
                    End Function
        )
)

여기서 오래 간단한 방법으로 루트를 얻는 네임스페이스 웹사이트에 대한 프로젝트입니다.

''' <summary>
''' Returns the namespace of the currently running website
''' </summary>
Public Function GetWebsiteRootNamespace() As String
    For Each Asm In AppDomain.CurrentDomain.GetAssemblies()
        If Asm Is Nothing OrElse Asm.IsDynamic Then Continue For

        For Each Typ In Asm.GetTypes
            If Typ Is Nothing OrElse Typ.Name Is Nothing Then Continue For
            If Typ.Name = "MyProject" Then Return Typ.Namespace.Split("."c)(0)
        Next
    Next

    Return Nothing
End Function

이것은 단순히 검사는 모든 어셈블리에 대한"하위"를 입력하고 반환합니다 루트에 대한 네임스페이스는 유형입니다.이는 로그를 위한 여러 개 있는 경우 웹사 프로젝트에서는 단일 솔루션을 공유하는 로그 시스템을 사용합니다.희망이 누군가가 도움이 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top