문제

UserControl을 프로젝트 네임스페이스 아래의 네임스페이스에 있는 것으로 어떻게 정의합니까?[RootNameSpace].[SubSectionOfProgram].Controls?

camainc의 답변으로 인해 편집되었습니다. 또한 단일 프로젝트에 모든 코드를 포함해야 한다는 제약도 있습니다.

질문을 마무리하려면 편집하세요. 내가 필요한 것을 수행하는 것이 불가능하다고 생각했기 때문에 caminc의 답변이 가장 가까운 해결책입니다.

도움이 되었습니까?

해결책

이것이 귀하가 요청하는 것인지 확실하지 않지만 이것이 우리가 하는 방식입니다.

우리는 모든 프로젝트의 네임스페이스를 일관된 방식으로 지정하며 사용자 컨트롤도 다르지 않습니다.프로젝트 창과 코드를 함께 사용하여 네임스페이스를 지정할 수도 있지만 프로젝트 설정 창을 사용하여 네임스페이스를 지정합니다.

각 솔루션은 다음과 같은 네임스페이스를 갖습니다.

[CompanyName].[SolutionName].[ProjectName]

따라서 사용자 컨트롤은 일반적으로 다음과 같은 네임스페이스를 갖는 "컨트롤"이라는 프로젝트에 있습니다.

OurCompany.ThisSolution.Controls

여러 가지 솔루션에 걸쳐 있을 수 있는 컨트롤이 있는 경우 다음과 같이 네임스페이스를 지정하면 됩니다.

OurCompany.Common.Controls

그런 다음 코드에서 라이브러리를 가져오거나 프로젝트를 솔루션에 추가합니다.

Imports OurCompany
Imports OurCompany.Common
Imports OurCompany.Common.Controls

또한 프로젝트가 있는 폴더의 이름을 네임스페이스와 동일하게 지정합니다(회사 이름은 포함하지 않음)(모든 솔루션은 회사 네임스페이스에 있는 것으로 가정).

\프로젝트
\프로젝트\내 솔루션
\프로젝트\MySolution\Controls

-- 또는 --

\프로젝트\
\프로젝트\공통
\Projects\Common\Assemblies
\프로젝트\공통\컨트롤

등.

도움이 되길 바랍니다...

다른 팁

컨트롤을 별도의 프로젝트에 두지 않으려면 코드 파일 맨 위에 Namespace 키워드를 추가하면 됩니다.예를 들어, 저는 여러 프로젝트에서 다음과 같은 작업을 수행했습니다.

Imports System.ComponentModel

Namespace Controls
   Friend Class FloatingSearchForm

      'Your code goes here...

   End Class
End Namespace

컨트롤이 속한 프로젝트에 대해 지정된 것과 다른 루트 네임스페이스에 컨트롤이 있도록 지정할 수 없습니다.VB는 네임스페이스에 대해 지정한 모든 것을 프로젝트 속성 창에 지정된 네임스페이스에 추가합니다.따라서 전체 프로젝트가 "AcmeCorporation.WidgetProgram"이고 제어 파일의 맨 위에 "Namespace Controls"를 추가하면 컨트롤은 "AcmeCorporation.WidgetProgram.Controls" 네임스페이스에 있게 됩니다."AcmeCorporation.SomeOtherProgram.Controls" 네임스페이스에 컨트롤을 표시하는 것은 불가능합니다.

또한 디자이너를 사용하여 컨트롤을 편집하는 경우 디자이너가 만든 숨겨진 부분 클래스에 Namespace 키워드를 추가해야 합니다.솔루션 탐색기에서 "모든 파일 표시" 버튼을 클릭한 다음 컨트롤 옆에 있는 확장 화살표를 클릭하세요."*.Designer.vb" 파일이 나열되어야 합니다.해당 파일에도 네임스페이스를 추가합니다.디자이너는 이 수정 사항을 존중하므로 이제 프로젝트가 오류 없이 컴파일되어야 합니다.분명히 디자이너 부분 클래스에 지정된 네임스페이스는 클래스 파일에 지정된 것과 동일해야 합니다!위의 예에서는 다음과 같습니다.

Namespace Controls
   <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
   Partial Class FloatingSearchForm

      'Designer generated code

   End Class
End Namespace

런타임에 (코드에서) 다음을 통해 사용자 컨트롤에 액세스할 수 있다는 뜻입니까?

[ProjectNamespace].[YourSpecialNamespace].Controls

기본값보다는

[ProjectNamespace].Controls

?왜냐하면 나는 그것이 가능하다고 믿지 않기 때문이다.내가 착각하지 않는다면, Controls 프로젝트/앱 컬렉션은 프레임워크에 내장되어 있으므로 변경할 수 없습니다.camainc이 언급한 것처럼 프로젝트 설정 창(또는 코드)을 사용하여 컨트롤 자체를 특정 네임스페이스에 배치할 수 있습니다.

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

물론 좀 더 생각해 보면 스스로 디자인하고 제작할 수도 있을 것 같습니다. Controls 네임스페이스의 컬렉션 - 아마도 내장된 항목에 대한 래퍼일 수도 있습니다...

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