문제

ASP.NET MVC 프로젝트에 App_Code 디렉토리를 추가하여 플러그인에 대한 동적 컴파일을 얻었습니다.

약간의 성가심은 새로운 플러그인을 개발할 때 APP_Code 디렉토리 내부의 클래스에 대해 지능을 얻지 못한다는 것입니다.

현재 프로젝트 내부의 다른 디렉토리에 작성한 다음 APP_Code에 복사하고 있습니다.

이 주위에 어떤 방법이 있습니까?

업데이트

아래에 "답변"을 게시했습니다. 기술적으로 이것은 내 자체 사양을 기반으로 한 질문에 답변합니다. 플러그인을 만들기 위해 도구 (IET Intellisense)의 사용이 필요하지 않아야합니다. 그러나 이것은 APP_Code를 사용하지 않고 동적으로 컴파일 된 플러그인 프레임 워크를 달성 할 수있는 방법에 대한 의문을 제기했습니다. 이 질문은 원본과는 매우 다르기 때문에 개별적으로 올릴 것입니다.

도움이 되었습니까?

해결책 3

설계 시간에 APP_Code의 MVC 웹 앱 어셈블리에서 코드를 참조 할 수는 없을 것 같습니다. 나는 이것이 Visual Studio의 웹 응용 프로그램 프로젝트의 특성 일 뿐이며 App_code 디렉토리의 코드가 다른 어셈블리로 컴파일되고 있다는 사실이라고 생각합니다.

원래 질문에서 나는 동적 컴파일 기능 때문에 APP_Code를 사용하고 싶다고 설명했다. 내 확장 성 요구 사항에 대해 생각하면, 지능이 재산이 작동하지 않는다는 사실은 IDE가 ~ 아니다 플러그인을 개발해야합니다 - 플러그인을 개발하기 위해 Visual Studio를 열려면 클래스 라이브러리를 사용할 수도 있습니다.

내 플러그인 아키텍처에 대해 생각하면 플러그인을 정의한다는 개념에 괜찮습니다.http://weblogs.asp.net/justin_rogers/articles/61042.aspx) 그리고와 같은 특정 디렉토리에서 플러그인의 자동로드를 수행 할 수 있습니다.

            var assemblies = new List<Assembly>();
        var di = new System.IO.DirectoryInfo(Server.MapPath("~/Plugins"));

        di.GetFiles("*.dll").ToList().ForEach(x => {
            assemblies.Add(Assembly.LoadFrom(x.FullName));
        });

        List<Plugin> ExternalPlugins =
            Plugin.InitializePlugins(assemblies).ToList();

/bin을 사용하지 않는 유일한 이유는 성능이었습니다. 그러나 플러그인 프로젝트가 주요 웹 프로젝트를 참조하기 때문에 모든 것을 확인하기 위해 포스트 빌드 이벤트를 사용해야했습니다.

따라서 더 나은 솔루션 (많은 사람들이 제안한대로)은 구성 파일을 사용하여 플러그인을 정의하고 DLL을 정상적으로 빈으로 떨어 뜨리는 것입니다.

그러나 이러한 모든 다른 접근 방식을 사용하면 초기 요구 사항을 스커트하고 있습니다.

이 경우 App_code를 정말로 나쁘게 사용하고 있으며 다시 물어볼 것입니까? ...

다른 팁

속성의 "Compile"에서 "Content"로 "Build Action"파일을 변경할 수 있습니다. 그런 다음 웹 사이트처럼 컴파일됩니다. 아래 기사는 다음과 같습니다.

http://vishaljoshi.blogspot.co.uk/2009/07/appcode-folder-doesnt-work-with-web.html

ASP.NET MVC를 사용합니다 웹 사이트와 대조적으로 웹 응용 프로그램 프로젝트. 웹 응용 프로그램 프로젝트를 편집해야합니다. 그만큼 App_Code 디렉토리는 그러한 응용 프로그램 유형에서 의미가 없습니다.

답이 있습니다. 적어도 MVC3의 경우. 솔루션을 솔루션으로 열지 마십시오. 로컬 IIS에서 웹 사이트로 열 수 있습니다 (그것이 실행 방법이라고 가정). 그런 다음 Dynamic App_code 코드가 IntelliSense와 함께 표시됩니다. 그러나 외부에있는 다른 코드 라이브러리를 탐색 할 수는 없습니다. 스튜디오의 또 다른 인스턴스가 필요하고 그렇게하기위한 솔루션으로 오프닝이 필요합니다.

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